2010-12-14 154 views
0

我正在編寫一個高級MySQL查詢,用於搜索數據庫並檢索用戶信息。我想知道的是,如果滿足WHERE條件1,可以選擇某些字段,如果符合WHERE條件2,可以選擇其他字段?根據某些WHERE條件選擇某些字段

數據庫:用戶

------------------------ 
| user_id | first_name | 
------------------------ 
| 1 | John | 
------------------------ 
| 2 | Chris | 
------------------------ 
| 3 |  Sam | 
------------------------ 
| 4 | Megan | 
------------------------ 

數據庫:友誼

-------------------------------------- 
| user_id_one | user_id_two | status | 
-------------------------------------- 
|  2  |  4  | 0 | 
-------------------------------------- 
|  4  |  1  | 1 | 
-------------------------------------- 

Status 0 = Unconfirmed 
Status 1 = Confirmed 

OK,你可以看到約翰&梅根被確認的好友,而克里斯&梅根是朋友,但關係是未經證實的。

我試圖寫的查詢如下:Megan(4)搜索新朋友我希望所有的用戶,除了她是一個確認的朋友與將返回。所以,結果應該返回2,3。但由於與user_id 2的關係存在但未被確認,所以我也想返回狀態,因爲友情表中的條目確實存在於兩者之間。如果用戶存在但關係表中沒有連接,它仍會返回該用戶的信息,但返回狀態爲NULL或根本不返回狀態,因爲它不存在於該表中。

我希望這樣做以來。如果您需要,請提出問題。

回答

1

爲什麼不使用左連接或if-not-exist?

SELECT users.* 
FROM (users LEFT JOIN friendships 
     ON status=1 AND (user_id_one=user_id OR user_id_two=user_id)) 
WHERE 
    status IS NULL 

SELECT users.* 
FROM users 
WHERE 
NOT EXISTS (SELECT * 
      FROM friendships 
      WHERE status=1 
      AND (user_id_one=user_id 
       OR user_id_two=user_id)) 
+0

感謝託比!像魅力一樣工作。我必須結合一個左外連接和一個WHERE子句才能獲得我的最終結果。 – ATLChris 2010-12-14 14:22:12

0

您可以創建單獨的查詢,然後UNION結果表。在每個查詢中,添加一個始終具有相同值的字段。

所以這樣的事情應該工作:

(SELECT id, 'Not Friends' As Status FROM t1 WHERE condition1) 
UNION 
(SELECT id, 'Unconfirmed' As Status FROM t1 WHERE condition2) 

只需確保字段相同的編號和名稱在這兩個查詢存在。