相関の必要がないと仮定して、以下を使用します:
SELECT a.*
FROM A a
WHERE EXISTS(SELECT NULL
FROM B b
HAVING MIN(b.some_val) > a.val)
相関が必要な場合:
SELECT a.*
FROM A a
WHERE EXISTS(SELECT NULL
FROM B b
WHERE b.id = a.id
HAVING MIN(b.some_val) > a.val)
説明
EXISTS
最初の一致に基づいてブール値で評価します。これにより、INを使用するよりも高速になり、JOINを使用する場合とは異なり、行が重複しません。 SELECT部分は重要ではありません-EXISTS SELECT 1/0 ...
に変更できます ゼロ除算のエラーは明らかですが、クエリは引き続き機能します。
EXISTS
内のサブクエリ 集計関数MINを使用して、最小のB.some_valを取得します。その値がa.val値よりも大きい場合、a.valはすべてのb値よりも小さくなります。 WHERE
の唯一の必要性 句は相関用です-集計関数はHAVING
でのみ使用できます 条項。