2011-08-25 75 views
0

我有一個由以下結構和記錄的表,我只想提取其中uid爲0或2的那些記錄的list_name,但我也想檢查如果一個記錄可用於uid 0和2,那麼只有它應該只顯示記錄與uid 2 ...我設法做到這一點與兩個查詢...我可以寫一個單一的查詢...使用加入來代替這兩個單獨的查詢

**id** **uid**  **list_name** 
1   2  favourite list 
2   0  Things i love 
3   0  my list 
4   2  my lists 
5   3  test334 
6   2  Things i love 

任何幫助或建議將不勝感激..Thanks提前..

+1

'但是我也想檢查記錄是否可用於UID 0和2'< - 你能不能解釋一下?我的例子中沒有看到重複的數據。 – Jacob

+1

輸出結果應該如何?我不太明白你的問題,對不起 – gbn

+2

你可能會展示你的雙查詢解決方案來澄清你正在嘗試做什麼? – Zaki

回答

1

另一種猜測:

SELECT 
    uid, list_name 
FROM 
    myTable T1 
WHERE 
    uid = 2 
    OR 
    (uid = 0 
    AND NOT EXISTS 
      (SELECT * 
       FROM myTable T2 
       WHERE T2.uid = 2 
       AND T2.list_name = T1.list_name 
      ) 
    ) 
+0

thnx它工作對我來說.. Thnx一噸你的善良幫助.. –

1

猜...

SELECT 
    list_name 
FROM 
    myTable T1 
WHERE 
    uid IN (0, 2) 
    AND 
    NOT EXISTS (SELECT * FROM myTable T2 WHERE T2.uid = 0) 
UNION ALL 
SELECT 
    list_name 
FROM 
    myTable T1 
WHERE 
    uid = 2 
    AND 
    EXISTS (SELECT * FROM myTable T2 WHERE T2.uid = 0) 
+0

thnx,它返回除uid 0,只有一次可用的行的所有行.... –