从同一个表上的两个帐户返回布尔值

时间:2013-06-09 14:37:42

标签: mysql sql

从同一张表中,根据结果进行两次不同选择并生成布尔值的好方法。

可测试

pKey | prodStatus
-----------------
1    |   0
2    |   0

我正在尝试这样做

select count(pKey) from testable where pKey = 1 and prodStatus = 0
along with
select count(pKey) from testable where pKey = 2 and prodStatus = 0

If both results where 1 then `true` else `false`

是的,我使用php和大量代码来做这件事,因为我不知道它是如何完全在sql中完成的,这样的事情在我之外是完整的。我怎么能在sql本身做这样的事情?

4 个答案:

答案 0 :(得分:2)

这对你有用吗?

SELECT (
    select count(pKey) = 1 from testable where pKey = 1 and prodStatus = 0
) AND (
    select count(pKey) = 1 from testable where pKey = 2 and prodStatus = 0
)

检查Demo

答案 1 :(得分:2)

SELECT SUM(pKey = 1) = 1 and SUM(pKey = 2) = 1
FROM testable
WHERE prodStatus = 0

答案 2 :(得分:1)

 select Sum(case When (pKey = 1 And prodStatus = 0) Or 
                      (pKey = 2 and prodStatus = 0)
             Then 1 Else 0 End)
 from testable 

答案 3 :(得分:1)

SELECT SUM(CASE WHEN pKey = 1 THEN 1 ELSE 0 END) 
     = SUM(CASE WHEN pKey = 2 THEN 1 ELSE 0 END)
FROM testable
WHERE prodStatus = 0

基于Barmar的回答,除了(1)他有AND我认为你想要=和(2)并非所有DB都允许将boolean隐式转换为1/0。这样更便携,并且如果有人使用不同的数据库登陆Google,则可以使用。

查询规划器可能足够智能,可以将两个带有子选择的查询优化到表中的一次传递中,但我不打赌它。

[edit] 在第一个版本中遗漏了END