Select *
From orders As O
Where Not Exists (
Select 1
From order_lines As OL1
Where OL1.Fullfilled Is Null
And OL1.OrderId = O.OrderId
)
SQL フィドルのバージョン
In 関数を使用する代替バージョン:
Select *
From orders As O
Where O.OrderId Not In (
Select OL1.OrderId
From order_lines As OL1
Where OL1.Fullfilled Is Null
)
SQL フィドルのバージョン
添加
集計関数を使用してこれを実現したいという要望がありました。以下は解決策ですが、Exists 関数と In 関数を使用するフォームは、次のクエリよりもはるかに適切に意図を表現しているため、これら 2 つの形式のいずれかをお勧めします。
Select O.OrderId
From Orders As O
Left Join Order_Lines As OL
On OL.OrderId = O.OrderId
And OL.Fullfilled Is Null
Group By O.OrderId
Having Count(OL.Id) = 0
SQL フィドルのバージョン
おそらく最高のパフォーマンスを発揮する別のフォーム:
Select O.OrderId
From Orders As O
Left Join Order_Lines As OL
On OL.OrderId = O.OrderId
And OL.Fullfilled Is Null
Where OL.Id Is Null
SQL フィドルのバージョン