試試看
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,因爲所有的作業(作業ID == 1和2)根據WorkOrderID == 6,具有StatusID == 9
它將返回兩個結果WorkOrderID 6,7
現在,這將返回WorkOrderID 6
按你的requirnment
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
012的另一種方式
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如果你不相信:)
JobID是否有可能沒有StatusID,或者它有多個StatusID?有各種方法,但知道這是可能的*(以及你想如何對待它)*是你的問題的根本。 *(例如,JobID = 1是否有另一個狀態ID用於不同的StatusTrackDate?如果是這樣,你是否只想考慮每個JobID最近的StatusTrackDate?或者JobID可以沒有StatusID出現,那麼視爲沒有StatusID爲9)* – MatBailie
我只需要獲取這些記錄,只有當某些WorkOrderID下的所有JobID都具有StatusID == 9時。 –
你沒有回答我的任何關於你的數據的問題。 – MatBailie