1

次のクエリは、入力が「完了」しているすべてのワークントを選択します (7 行目のサブクエリ)。これは正常に機能します...入力が1つしかない場合。入力の1つだけが存在するのではなく、すべての入力がサブクエリによって返されるセットである必要があるように、これを変更するにはどうすればよいですか?

SELECT workunits.ID 
FROM workunits 
LEFT JOIN workunitInputs ON workunits.ID = workunitInputs.workunitID 
WHERE workunits.ID NOT IN (SELECT workunitID FROM jobworkunitassoc) 
AND ( 
    workunitInputs.inputID IN ( 
        SELECT workunitOutputs.outputID 
        FROM workunitOutputs 
        LEFT JOIN workunits ON workunitOutputs.workunitID = workunits.ID 
        LEFT JOIN jobworkunitassoc ON workunits.ID = jobworkunitassoc.workunitID 
        LEFT JOIN jobs ON jobworkunitassoc.jobID = jobs.ID 
        WHERE jobs.done = 1 
    ) 
    OR workunitInputs.inputID IS NULL 
) 
GROUP BY workunits.ID

ありがとう、イストヴァン。

4

2 に答える 2

0

このクエリは私にとってはうまくいきますが、最善の解決策ではないかもしれません: http://pastebin.com/g9qBjQGU

于 2012-08-14T22:13:35.917 に答える
0

その句を次のように変更します。

AND ( 
    workunitInputs.inputID NOT IN ( 
        SELECT workunitOutputs.outputID 
        FROM workunitOutputs 
        LEFT JOIN workunits ON workunitOutputs.workunitID = workunits.ID 
        LEFT JOIN jobworkunitassoc ON workunits.ID = jobworkunitassoc.workunitID 
        LEFT JOIN jobs ON jobworkunitassoc.jobID = jobs.ID 
        WHERE jobs.done != 1 
    )

これは論理トートロジーに基づいています: Y 内のすべての X === !Y 内の X なし

于 2012-08-14T21:47:53.393 に答える