次のクエリを実行しようとしていますが、エラーが発生します。
select S
from St
where count(
select *
from L
where L.Wh = S
) = 0
エラーが発生します:
エラー コード 1064、SQL 状態 42000: SQL 構文にエラーがあります...
このクエリをどのように記述できますか?
サブセレクト内で COUNT 集計関数を使用する必要があるため、サブクエリは単一の結果を返します。
select S
from St
where (select COUNT(*)
from L
where L.Wh = St.S
) = 0
"L" にレコードがない "St" のすべてのレコードを選択する場合は、次のNOT EXISTS()
関数も使用できます。
SELECT S
FROM St
WHERE NOT EXISTS (SELECT 1 FROM L WHERE L.Wh = St.S)
NOT EXISTS
句を使用できます。
SELECT S
FROM ST
WHERE NOT EXISTS (
SELECT *
FROM L
WHERE L.Wh = ST.S
)
このようにしてみてください
select s from st
where (select count(*) from L where l.wh=s)=0
別のオプションは、次を使用していjoin
ます。
select S from St
left join L on St.S = L.Wh
where L.Wh is null
作業例: http://sqlfiddle.com/#!2/d3c23/2
個人的には、通常は結合を好みますが、さらに別のオプションを使用することもできますnot in
:
select S from St
where S not in (select Wh from L)