如何使用一个查询检查两列中的唯一值?

时间:2012-04-12 14:41:00

标签: mysql pdo

我有一个MySQL表,其中两个字段应该是唯一的。当提供新数据时,我需要检查它是否已经存在,因此想做类似的事情(包括PDO参数):

SELECT COUNT(foo),COUNT(bar) 
FROM `mytable` 
WHERE foo=:foo 
OR bar=:bar;

这里的问题是,如果两个值都返回相同的计数,那么在该计数为1的情况下,我不知道哪个列包含匹配值。显然我可以把它分成2个查询,但有没有更简洁的方法来同时检查两个?

2 个答案:

答案 0 :(得分:1)

也许是这样的:

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`

答案 1 :(得分:1)

不是真的,但你可以假装它:

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`

在三者之间,你需要测试哪个表现最佳。