2012-04-12 33 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` 

三者之間,你會想測試看看哪個效果最好。

相關問題