0

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

可测试的

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

4 回答 4

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
)

检查演示

于 2013-06-09T14:43:10.280 回答
2
SELECT SUM(pKey = 1) = 1 and SUM(pKey = 2) = 1
FROM testable
WHERE prodStatus = 0
于 2013-06-09T14:45:32.480 回答
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) 并非所有数据库都允许将布尔值隐式转换为 1/0。这更便携,如果有人使用不同的数据库登陆谷歌,它将工作。

查询计划器可能足够聪明,可以将带有子选择的两个查询优化为只通过表的一次,但我不会打赌。

[编辑]省略了END第一个版本。

于 2013-06-09T15:44:39.103 回答
1
 select Sum(case When (pKey = 1 And prodStatus = 0) Or 
                      (pKey = 2 and prodStatus = 0)
             Then 1 Else 0 End)
 from testable 
于 2013-06-09T14:44:12.410 回答