我有一個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