我有一个MySQL表,其中两个字段应该是唯一的。随着新的数据提供了我需要检查,如果它已经存在,所以想这样做(PDO参数包括):如何使用一个查询检查两列中的唯一值?
SELECT COUNT(foo),COUNT(bar)
FROM `mytable`
WHERE foo=:foo
OR bar=:bar;
这里的问题是,如果这两个值会回来具有相同的数,所以在计数为1的情况下,我不知道哪一列包含匹配值。很明显,我可以将它分解为2个查询,但是有没有更好的方法可以同时检查两个查询?
我有一个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`
难道你忘记了where语句吗? – 2012-04-12 14:46:55
这似乎与我的测试数据集现场,谢谢! – shanethehat 2012-04-12 14:47:26
@Clodoaldo不,因为CASE – Umbrella 2012-04-12 14:47:49
不是真的,但你可以假的喜欢:
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`
三者之间,你会想测试看看哪个效果最好。
我想你可能要找的是异或?我不明白你的问题。 “......如果两个数值都会以相同的数字返回,那么是这样。”? – 2012-04-12 14:43:56