从上到下WorkOrderID有许多JobID,每个JobID都有一些StatusID。
我只想获取每个JobID的StatusID==9的工作订单的记录。
根据表中给出的数据,我只想获取一个结果行,这是针对WorkOrderID 6的,因为WorkOrderID==6下的所有作业(JobID==1和2)的StatusID==9。
JobID==4、5、6、7属于WorkOrderID==7,因此不获取WorkOrderID==7的记录,因为其中一个JobID的StatusID不是9(JobID==4的StatusID==1),从某种意义上说,此WorkOrderID尚未完成。
把桌子的名字从上到下写下来。工单、作业、作业状态、状态
最佳答案
试试看
SELECT * FROM WorkOrders WHERE WorkOrderID IN (
SELECT WorkOrderID FROM Jobs WHERE jobID IN (
SELECT jobID FROM Jobs_Status WHERE StatusID =9))
有一件事我想澄清的是
jobID (1,2,5,6,7)
有StatusID =9
所以WorkOrderID
对jobID (1,2,5,6,7)
的反对是6,7所以根据你所说的根据表中给出的数据,我们将只有一个结果行用于WorkOrderID 6,因为WorkOrderID==6下的所有作业(JobID==1和2)的StatusID==9
它将返回两个结果
WorkOrderID 6,7
现在这将根据您的要求返回
WorkOrderID 6
SELECT q.* FROM (
SELECT w.`WorkOrderID`,
(SELECT
GROUP_CONCAT(`jobID` SEPARATOR ',') FROM `jobs` WHERE `jobs`.`WorkOrderID`=w.`WorkOrderID` GROUP BY `jobs`.`WorkOrderID`) AS Alljobids
, GROUP_CONCAT(j.`jobID` SEPARATOR ',') AS onlystatusids
FROM `workorders` w INNER JOIN `jobs` j ON (w.`WorkOrderID` = j.`WorkOrderID`)
INNER JOIN `jobs_status` js ON (j.`jobID` = js.`jobID`) WHERE js.`StatusID`=9
GROUP BY w.`WorkOrderID`) q WHERE q.Alljobids=q.onlystatusids
下面是另一种使用
HAVING
SELECT w.`WorkOrderID`,
(SELECT
GROUP_CONCAT(`jobID` SEPARATOR ',') FROM `jobs` WHERE `jobs`.`WorkOrderID`=w.`WorkOrderID` GROUP BY `jobs`.`WorkOrderID`) AS Alljobids
, GROUP_CONCAT(j.`jobID` SEPARATOR ',') AS onlystatusids
FROM `workorders` w INNER JOIN `jobs` j ON (w.`WorkOrderID` = j.`WorkOrderID`)
INNER JOIN `jobs_status` js ON (j.`jobID` = js.`jobID`) WHERE js.`StatusID`=9
GROUP BY w.`WorkOrderID`
HAVING Alljobids=onlystatusids
这是你的Fiddle Example如果你不相信:)
关于php - 如果满足特定条件,则为以下四个表编写联接查询以获取记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17393763/