我有一个 MySQL 表,其中两个字段应该是唯一的。随着新数据的提供,我需要检查它是否已经存在,因此想做类似的事情(包括 PDO 参数):
SELECT COUNT(foo),COUNT(bar)
FROM `mytable`
WHERE foo=:foo
OR bar=:bar;
这里的问题是,如果两个值都返回相同的计数,那么如果该计数为 1,我不知道哪一列包含匹配值。显然我可以将其拆分为 2 个查询,但是有没有一种更简洁的方法可以同时检查这两个查询?
也许是这样的:
SELECT
SUM(CASE WHEN foo='foo' THEN 1 ELSE 0 END) AS FooCount,
SUM(CASE WHEN bar='bar' THEN 1 ELSE 0 END) AS BarCount
FROM
`mytable`
不是真的,但你可以像这样伪造它:
SELECT COUNT(foo) FROM `mytable` WHERE foo=:foo
UNION
SELECT COUNT(bar) FROM `mytable` WHERE bar=:bar;
或者
SELECT (SELECT COUNT(foo) FROM `mytable` WHERE foo=:foo) AS `foo`, (SELECT COUNT(bar) FROM `mytable` WHERE bar=:bar) AS `bar`;
或者
SELECT SUM(IF(foo=:foo, 1, 0)) as foo, SUM(IF(bar=:bar, 1, 0)) as bar FROM `mytable`
在这三者之间,您需要进行测试,看看哪个表现最好。