2016-02-24 71 views
0

我有一個列出用戶相冊的表。Mysql:如何檢索其中一個字段不包含來自ENUM的特定值的行的列表

PRIMARY KEY,USER KEY,TYPE和TITLE。

TYPE字段是一個ENUM。

通常每個用戶都有一個類型爲「頭像」的條目,在註冊時自動創建,但它似乎沒有。

我想要一個查詢,可以輸出沒有任何'頭像'類型條目關聯的用戶鍵。

我想這個查詢會做的伎倆:

SELECT * FROM (
      SELECT DISTINCT user_key FROM `album` WHERE 1 
    ) a 
    OUTER JOIN (
      SELECT user_key FROM `album` WHERE type = 'avatar' 
    ) b 
    ON a.user_key = b.user_key 

的目標是從表中選擇每個不同的用戶,那麼它有一個「阿凡達」後的每用戶終於做了一個外部聯接爲了僅檢索沒有該條目的用戶。

通過內部連接,我得到了具有此條目的正確用戶列表(這不能解決我的問題),但是使用外部連接時出現語法錯誤。

我是否遇到外連接有問題或者有更明智的方法來獲得我想要的內容?

謝謝。

回答

0

沒有「OUTER JOIN」在MySQL! ,你應該使用「LEFT | RIGHT JOIN」,以及一個完整的外部聯接您可以UNION他們是這樣的:

SELECT * FROM table1 a 
LEFT JOIN table2 b ON a.user_key = b.user_key 
UNION 
SELECT * FROM table1 a 
LEFT JOIN table2 b ON a.user_key = b.user_key 

但似乎沒有必要加盟選擇,如果你想獲得用戶的列表!在類型字段不是「阿凡達」,你務必做好這樣的誰:

SELECT DISTINCT(user_Key) FROM albums WHERE Type <> 'avatar' 
AND user_key NOT IN (Select DISTINCT(user_key) FROM albums WHERE Type = 'avatar'); 

沒有必要,因爲ENUM類型僅得到一個價值和類型設置爲使用「NOT IN」爲ENUM類型得到一些價值

+0

感謝您的信息,我從來沒有在MySQL之前使用外部JOIN。 我不明白在這種情況下使用LEFT JOIN,因爲我想從同一個表中加入兩個子請求。 如果我只使用沒有左連接的UNION,我會得到相反的結果(用戶具有頭像專輯)。正如我提到的Moe,如果我選擇不是頭像的類型,我會得到其他類型的所有行。我想要的是沒有任何與他們相關聯的包含'頭像'類型的行的用戶,即使他們可以有其他類型相關聯。 – user3803848

+0

@ user3803848:好的,我明白了! ,我會編輯我的答案... –

+0

太棒了,那有效。我沒有想到這種類型的subrequest去除用戶頭像,非常聰明。謝謝。 – user3803848

0

如果我理解正確的qurstion,你只是想對所有用戶user_key列衛生組織的類型不是「阿凡達」

SELECT DISTINCT(user_key) FROM album WHERE type IS NOT IN ('avatar') 
+0

不完全是因爲有其他類型,如果我嘗試不在,我會得到其他類型,但無論如何,我不知道爲什麼,但那曲當只有「IN」正常工作時,ery也會給我一個錯誤。 我應該精確地說我使用MariaDB,但我不認爲這兩者之間有這樣的區別。 – user3803848

+0

所以你想獲得所有的用戶密鑰,爲那些有頭像的人,並從不同的用戶密鑰列表中減去這些用戶密鑰 'SELECT DISTINCT user_key FROM album WHERE type NOT IN(SELECT user_key FROM album WHERE type IN('avatar' ))' – Moe

+0

是的,這就是我想要的,Mahmood_M給了我答案。您的請求正試圖撤銷其子類型是子請求檢索user_key的結果的條目,以便不起作用,但我理解我應該使用的邏輯來獲取我的結果。謝謝 ! – user3803848

相關問題