我正在尝试编写一个查询,该查询结合查找将status
列设置为CONFIRMED
的特定记录(由主键标识),但也可以查找表中是否存在该主键一点都不这就是我试过的:
SELECT
count(`p2`.`id`) AS `confirmed`,
count(`p1`.`id`) AS `exists`
FROM `foos` `p2`, `foos` p1`
WHERE
`p2`.`id` = 28 AND
`p2`.`status` = 'CONFIRMED' AND
`p1`.`id` = 28
同样,我正在尝试查找foo
是否存在id = 28
和status = 'CONFIRMED'
,但我也想知道该ID是否不存在或是否存在存在,但status
不是confirmed
。 MySQL说这个查询附近存在问题
`p2`.`id` = 28 AND
`p2`.`status` = 'CONFIRMED'
这个查询是否可行?
答案 0 :(得分:3)
我会这样解决:
SELECT COUNT(a1.id) AS EXISTS,
IF(status = 'CONFIRMED', 1, 0) AS confirmed
FROM foo f1
LEFT JOIN foo f2
ON f1.id = f2.id
WHERE f1.id = 28
答案 1 :(得分:1)
如果您不介意使用子查询,这将是一个解决方案:
SELECT count(p1.id) AS 'confirmed',
(SELECT count(p2.id)
FROM foos p2
WHERE p2.id = 28) AS 'exists'
FROM foos p1
WHERE p1.id = 28 AND p2.status = 'CONFIRMED';