我试图运行下面的查询,但得到一个错误:在SQL中使用计数()= 0
select S
from St
where count(
select *
from L
where L.Wh = S
) = 0
我得到的错误:
error code 1064, SQL state 42000: You have an error in your SQL syntax...
我如何写这个查询?
我试图运行下面的查询,但得到一个错误:在SQL中使用计数()= 0
select S
from St
where count(
select *
from L
where L.Wh = S
) = 0
我得到的错误:
error code 1064, SQL state 42000: You have an error in your SQL syntax...
我如何写这个查询?
您可以使用NOT EXISTS
子句。
SELECT S
FROM ST
WHERE NOT EXISTS (
SELECT *
FROM L
WHERE L.Wh = ST.S
)
完美。谢谢! – CodeGuy
您必须在子查询中使用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)
尝试这样
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)
您最好通过词语*解释您需要的*,因为现在可以解答“我该如何解决这个问题?”的一个可能答案。是 - “用SELECT S FROM St替换它” – zerkms
@zerkms我明白'code'而不是普通的'English',因为英语不是我的母语:-) –
@Mithun:确实有可能。但问题是 - 通常错误的查询不是很有用(甚至可能导致错误的答案),因此最好添加文本描述。我希望OP会在下一次做到这一点。 PS:它甚至不接近我的母语;-) – zerkms