この質問のタイトルは苦労しましたが、SQLの専門家にとっては簡単だと思います。mysql - すべてのサブ項目のステータスが条件を満たしている項目の数を取得する
テーブル:
SIMULATION: ID, SIMULATION_SET_ID, EXECUTION_STATUS
SIMULATION_SET: SET_ID
SIMULATION_BATCH: ID
BATCH_ELEMENT: SIMULATION_BATCH_ID, SIMULATION_SET_ID
(すなわち、セットは、シミュレーションの束を含むバッチは、中間テーブルを介してセットの束を含むバッチが実際に基づいてグループセットにメタ容器です。それらが要求され、コンテナとして使用されますが、それ自体にステータスが含まれていません)。
完成したバッチの数を返そうとしていますが、完成したバッチはすべてのシミュレーション実行ステータスがCOMPLETEDになっています。しかし、たとえすべてが完成していなくても、完成したシミュレーションがバッチリになっているようです。これは私の試みだった:
SELECT COUNT(DISTINCT B.ID)
FROM SIMULATION_BATCH B
INNER JOIN BATCH_ELEMENT BE ON BE.SIMULATION_BATCH_ID=B.ID
INNER JOIN SIMULATION S ON S.SIMULATION_SET_ID=BE.SIMULATION_SET_ID
WHERE S.EXECUTION_STATUS ='COMPLETED'";
だから私はこれがうまくいかないと思った。私はAND NOT EXISTS(SELECT ...)句を追加して、実行状態が完了していないシミュレーションを実行していたバッチを除外しようとしましたが、何も動作しませんでした。走っていた。これは私が追加したものです:
AND NOT EXISTS (SELECT SIM.ID
FROM SIMULATION SIM
INNER JOIN BATCH_ELEMENT BE2 ON BE2.SIMULATION_SET_ID=SIM.SIMULATION_SET_ID
WHERE BE.SIMULATION_BATCH_ID=B.ID AND SIM.EXECUTION_STATUS != 'COMPLETED');
ありがとうございました。私はサブクエリをよりよく学ぶ必要があると思うが、私はよくわからない。私はカウントを得る方法を見つけた後、バッチのリストを取得する必要があります。しかし、カウントを得ることができれば、私はそれを行うことができます。
更新:私はこれを一日中続けてきましたが、もっと間違ったことを除いてそれほど進歩はしていません。私が探しているものを簡単に説明する方法は、バッチ内のすべてのシミュレーションがいくつかの基準(ステータスが完全であるなど)を満たすバッチを必要としていることです。 ANY(少なくとも1)のシミュレーションが基準を満たしているときに私はこれを行うことができますが、それは私を捨てているようだ。どんなアイデアでも大歓迎です。
あなたNOT EXISTS
が働いていたが、ここでは少し異なるアプローチだしなかったであろう、なぜ私は表示されません
サンプルデータを投稿できますか?正直なところ、あなたのクエリはうまくいくように見えます... –
私はサンプルデータを得ることができますが表示されます。 not exists節で何が起こったのかは、シミュレーションが実行されていたときに0のカウントが得られたことと、すべてが完了したときにカウントが満了したことです。 – titania424