在同一张表中,做两个不同的选择并根据结果生成布尔值的好方法。

可测试的

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本身中执行类似的操作?

最佳答案

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都允许将布尔值隐式转换为1/0。这种方法更具可移植性,如果使用其他数据库的用户在此找到Google,它将可以使用。

查询计划程序可能很聪明,可以将两个带有子选择的查询优化为只对表进行一次传递,但是我不会打赌。

[edit]在第一个版本中省略了END

关于mysql - 从同一表上的两个帐户返回 bool 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17010712/

10-09 13:52