从同一张表中,根据结果进行两次不同选择并生成布尔值的好方法。
可测试
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本身做这样的事情?
答案 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
。