一連の括弧でステートメントをラップし、エイリアスを割り当てて (閉じた親に続いて)、それをテーブルのように使用できます。(これをインライン ビューと呼びます。)
SELECT q.*
FROM (
SELECT * FROM table1 ... /*your whole query here*/
) q
WHERE ...
WHERE 句で、インライン ビューによって返される任意の列を参照できます。(このアプローチは、小さい (適度なサイズの) 結果セットを返すインライン ビューでは比較的うまく機能します。しかし、より大きな結果セットでは、外側のクエリを実行する前に、そのビューを「実体化」するために多くの手間がかかります) . これは便利なパターンですが、このパターンを悪用して、インライン ビューを使用しない同等のステートメントよりもはるかにひどいパフォーマンスのステートメントを作成することもできます。
しかし、それがあなたの質問であるかどうかはわかりません。
WHERE 句に別の述語を追加できますか?
確かにできます...別のAND
またはOR
キーワードを追加して、条件付きテストを追加するだけです。AND と OR の優先順位に注意してください。予想される順序を指定するために括弧を使用することをお勧めします。違いがあります...
( a OR b ) AND c
a OR ( b AND c)
しかし、あなたが尋ねている質問にも答えているかどうかはわかりません。
相関サブクエリでは、 EXISTS
andNOT EXISTS
ではなくIN
andを使用できますNOT IN
これは同等の結果を返すと思います:
SELECT *
FROM table1
WHERE NOT EXISTS
( SELECT 1 FROM table2
WHERE table2.czlowiek_id=table1.czlowiek_id
)
OR EXISTS
( SELECT 1 FROM table2
WHERE table2.czlowiek_id=table1.czlowiek_id
AND table2.szkolenie_id IN ('$selected_one')
AND table1.instruktor IN ('$selected_two')
)