我正在尝试运行以下查询,但出现错误:
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
如果要选择“St”中没有“L”中任何记录的所有记录,还可以使用该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)