2016-09-19 157 views
0

我一直在這個瘋狂的,但我已經儘可能我想我可以。MySQL左連接表本身

我有一個表的用戶及其組(這是用戶表和組表之間的中間表)。

我需要能夠選擇在一個組中但不在另一個組中的用戶。

我知道我不應該在「開」期間使用!=因爲它永遠掛起,但我無法弄清楚要使用什麼樣的連接。

例如我想挑選所有在「mod_group」但不在「admin_group」中的用戶。

我已經簡化了這個例子,但是我知道他們似乎是另一種方式來做到這一點。不幸的是,重寫其他可能不是一種選擇,所以我希望能以這種方式找到解決方案。

編輯:添加表更清楚

這是中東表

| data_user | data_group | 
+-----------+------------+ 
|  1  |  1  | 
|  1  |  2  | 
|  2  |  2  | 
|  3  |  1  | 
|  3  |  2  | 
|  4  |  2  | 
|  5  |  1  | 

預期的結果將返回用戶2和4,如果我在尋找那些誰是第2組而不是組別1

它需要dynanmic,所以我可以做相反的(尋找誰是1組用戶,但沒有第2組,這將返回USER5)

+1

添加您的表架構和一些可檢驗的記錄 –

+0

發佈你的表更好地理解 – rishad2m8

回答

0

我會假設你的表結構是沿着以下線的東西:

中間表

user_id | group_id 

組表

id | name 

用戶表

id | username 

可以使用條件聚集了用戶在middle_table以確定誰是在mod_group用戶,但不是在admin_group

SELECT t3.username 
FROM middle_table t1 
INNER JOIN group_table t2 
    ON t1.group_id = t2.id 
INNER JOIN user_table t3 
    ON t1.user_id = t3.id 
GROUP BY t1.user_id 
HAVING COUNT(CASE WHEN t2.name = 'mod_group' THEN 1 ELSE 0 END) >= 1 AND 
     COUNT(CASE WHEN t2.name = 'admin_group' THEN 1 ELSE 0 END) = 0 
+0

我認爲這可能是正確的,但是當我嘗試它時,它返回一個空集(當我知道mod組中有用戶不在管理組中時)。我更新了原始帖子,以提供中間表格和預期輸出的更好樣本。 我並不擔心group_table和user_table,我知道如何做這些連接。中間表只能在一個列表中找到用戶,而不是我正在努力的其他用戶。 歡呼聲 –

+0

我相信這個查詢應該沒有問題。如果可能,請張貼一些示例數據。 –