2012-04-12 53 views
0

我有一个MySQL表,其中两个字段应该是唯一的。随着新的数据提供了我需要检查,如果它已经存在,所以想这样做(PDO参数包括):如何使用一个查询检查两列中的唯一值?

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

这里的问题是,如果这两个值会回来具有相同的数,所以在计数为1的情况下,我不知道哪一列包含匹配值。很明显,我可以将它分解为2个查询,但是有没有更好的方法可以同时检查两个查询?

+1

我想你可能要找的是异或?我不明白你的问题。 “......如果两个数值都会以相同的数字返回,那么是这样。”? – 2012-04-12 14:43:56

回答

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` 
+0

难道你忘记了where语句吗? – 2012-04-12 14:46:55

+0

这似乎与我的测试数据集现场,谢谢! – shanethehat 2012-04-12 14:47:26

+0

@Clodoaldo不,因为CASE – Umbrella 2012-04-12 14:47:49

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` 

三者之间,你会想测试看看哪个效果最好。

相关问题