-1

我正在尝试运行以下查询,但出现错误:

select S 
from St
where  count(

    select *
    from L
    where L.Wh = S

) = 0

我得到错误:

错误代码 1064,SQL 状态 42000:您的 SQL 语法有错误...

我该如何编写这个查询?

4

4 回答 4

6

您必须在子选择中使用 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)
于 2012-10-25T06:49:29.893 回答
6

你可以使用NOT EXISTS从句。

SELECT S
FROM ST
WHERE NOT EXISTS (    
  SELECT *
  FROM L
  WHERE L.Wh = ST.S
)
于 2012-10-25T06:52:02.537 回答
2

像这样试试

 select s from st
   where (select count(*) from L where l.wh=s)=0
于 2012-10-25T06:49:49.300 回答
1

另一种选择是使用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)

示例:http ://sqlfiddle.com/#!2/d3c23/3

于 2012-10-25T06:53:00.893 回答