2011-11-15 25 views
0

我試圖編寫一個查詢,該查詢結合查找其status列設置爲CONFIRMED的特定記錄(由主鍵標識),但也可以查找表中是否存在該主鍵。這是我的嘗試:查找計數和是否存在ID

SELECT 
count(`p2`.`id`) AS `confirmed`, 
count(`p1`.`id`) AS `exists` 
FROM `foos` `p2`, `foos` p1` 
WHERE 
`p2`.`id` = 28 AND 
`p2`.`status` = 'CONFIRMED' AND 
`p1`.`id` = 28 

所以,再一次,我試圖找出是否存在與id = 28status = 'CONFIRMED'一個foo,但我也想知道ID是否不存在或是否確實存在,但status不是confirmed。 MySQL說這個查詢有問題

`p2`.`id` = 28 AND 
`p2`.`status` = 'CONFIRMED' 

這個查詢是否可能呢?

+1

你好像之前'p1'丟失了一個反引號在'FROM'語句中。 – Fluff

+0

Facepalm。謝謝。但它仍然不合邏輯。我得到的輸出是: – Jay

+0

證實:0,存在:0;我預計證實:0,存在:1.我的查詢邏輯錯誤? – Jay

回答

3

我會解決這個問題是這樣的:

SELECT COUNT(a1.id) AS EXISTS, 
     IF(status = 'CONFIRMED', 1, 0) AS confirmed 
FROM foo f1 
     LEFT JOIN foo f2 
     ON f1.id = f2.id 
WHERE f1.id = 28 
+0

我意識到不需要做一個JOIN,下面的工作應該是一樣的:'SELECT COUNT(id)AS e,IF(status ='CONFIRMED',1,0)AS從foo確認WHERE id = 28;' – Fluff

+0

我最終做了其他的事情:「SELECT'id','status' FROM'foo' WHERE'id' = 28 LIMIT 1」:P。空結果集意味着id不存在,否則,我可以檢查結果集中的狀態列。但是你的是一個純粹的MySQL解決方案,根據我提出的問題,正確的答案也是如此。謝謝你的幫助。 – Jay

1

如果你不介意使用子查詢,這將是一個解決方案:

SELECT count(p1.id) AS 'confirmed', 
    (SELECT count(p2.id) 
    FROM foos p2 
    WHERE p2.id = 28) AS 'exists' 
FROM foos p1 
WHERE p1.id = 28 AND p2.status = 'CONFIRMED';