2012-10-25 82 views
-1

我试图运行下面的查询,但得到一个错误:在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...

我如何写这个查询?

+4

您最好通过词语*解释您需要的*,因为现在可以解答“我该如何解决这个问题?”的一个可能答案。是 - “用SELECT S FROM St替换它” – zerkms

+0

@zerkms我明白'code'而不是普通的'English',因为英语不是我的母语:-) –

+0

@Mithun:确实有可能。但问题是 - 通常错误的查询不是很有用(甚至可能导致错误的答案),因此最好添加文本描述。我希望OP会在下一次做到这一点。 PS:它甚至不接近我的母语;-) – zerkms

回答

6

您可以使用NOT EXISTS子句。

SELECT S 
FROM ST 
WHERE NOT EXISTS ( 
    SELECT * 
    FROM L 
    WHERE L.Wh = ST.S 
) 
+0

完美。谢谢! – CodeGuy

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) 
+0

现在我得到“未知列S在'where'子句 – CodeGuy

+0

您可能必须添加表名作为前缀;否则他可能不知道从哪里得到” S“from。我更新了我的答案。 – Styxxy

+0

完美,谢谢! – CodeGuy

2

尝试这样

select s from st 
    where (select count(*) from L where l.wh=s)=0