2011-07-01 36 views
1

問題我有一個數據庫(user_interests)設置了3個字段:i_id(unique),interest_id,uid。MYSQL:寫在哪裏根據情況條款

接着,第二個DB(利益)建立與利益:interest_id(唯一的),INTEREST_NAME

我想要做一個SQL查詢返回的兩個用戶有共同興趣的清單:用戶A(配置文件的所有者)和用戶B(配置文件的您/查看者)。我想我需要查詢user_interests,然後加入JOIN興趣來獲得興趣的名稱。

SELECT user_interests.i_id, user_interests.uid, interests.interest_name 
FROM databases.user_interests 
LEFT JOIN databases.interests 
ON interest.interest_id = user_interest.interest_id 
WHERE _______________ 

我對where子句感到困惑(如果這是正確的做法)。我的目標是從user_interests.interests中獲取interest_id,其中user_interests.uid既是A又是B(在單獨的行中)。

我看到這個鏈接,但無法弄清楚到底我錯過了什麼:Group by x where y = A and B and C

+0

請編輯您的問題的標題,將其更改爲一個實際問題] – Ibu

回答

0

我不認爲你需要在這種情況下,where子句只是將其刪除,你會得到的一組數據您正在尋找:

SELECT user_interests.i_id, user_interests.uid, interests.interest_name 
FROM databases.user_interests 
LEFT JOIN databases.interests 
ON interest.interest_id = user_interest.interest_id 
0

您所查詢的是正確的去除where部分並運行它。它會給你相同的輸出,你需要...

0

如果你想獲得一個特定的結果集,你也可以創建一個where語句,如下所示。我並不懷疑之前提交的答案,我只是試圖幫助您尋找您正在尋找的特定WHERE語句。

SELECT user_interests.i_id, user_interests.uid, interests.interest_name 
FROM databases.user_interests 
LEFT JOIN databases.interests 
ON interests.interest_id = user_interests.interest_id 
WHERE user_interests.uid IN ('A','B'); 

也請注意,我改變了你對加入使用利益和user_interests,用「S」附加到兩個,因爲這些是表的名稱。它們保持與在數據庫中分配的模式名稱相同的模式名稱。

1

我會通過加入兩個user_interests副本,一個針對用戶A(配置文件所有者)和另一個針對用戶B(配置文件查看者)進行解析。

SELECT * 
FROM interests I 
INNER JOIN user_interests A ON 
    A.interest_id = I.interest_id 
    AND A.user_id = {profile owner} 
INNER JOIN user_interests B ON 
    B.interest_id = I.interest_id 
    AND B.user_id = {profile viewer} 

或者,更沿您提供的代碼段的線,你能完成的where子句喜歡的東西......

SELECT * FROM interests 
WHERE interest_id in (SELECT interest_id 
         FROM users 
         WHERE user_id = A) 
     AND 
     interest_id in (SELECT interest_id 
         FROM user_interests 
         WHERE user_id = B) 

希望這些作品的一個給你!讓我知道如果我可以澄清

+0

這是偉大的,謝謝!正是我想要做的。 – Erik

+0

沒問題!很高興它解決了 – goggin13