2014-11-04 69 views
0
匹配另一個表的列中的值

我使用這個查詢:選擇值僅如果列不MYSQL

SELECT u.name, u.lastname, u.username 
FROM users AS u, inmeeting AS i 
WHERE i.memo='7' AND i.user = u.keyid 

要獲得所有用戶的數據,如果keyid的該用戶在表中記錄(這意味着用戶在場)爲特定會議的id(這就是爲什麼i.memo = 7)。

現在我想編寫另一個查詢,以獲取所有其他未參加該會議的其他人的所有用戶數據。我這樣寫:

SELECT u.name, u.lastname, u.username 
FROM users AS u, inmeeting AS i 
WHERE i.memo='7' AND i.user <> u.keyid 

然而,這個查詢讓我每次用戶兩次!我不明白我做錯了什麼或者如何做對(嗯,我認爲最後一個可以用子查詢來完成,但我希望有更優雅的東西)。有任何想法嗎?

回答

0

您可以用

SELECT 
    u.name, u.lastname, u.username 
FROM 
    users AS u 
WHERE 
    u.keyid NOT IN (SELECT i.user FROM inmeeting WHERE i.memo='7') 
+0

jaja這正是我所做的。很高興知道我們同意。我會檢查你的答案是否正確,因爲它是我想要的。 – aarelovich 2014-11-04 11:14:53

2

最佳嘗試使用LEFT OUTER JOIN和檢查不匹配(即檢查爲左連接表的列WHERE子句中的NULL): -

SELECT u.name, u.lastname, u.username 
FROM users AS u 
LEFT OUTER JOIN inmeeting AS i 
ON i.user = u.keyid 
AND i.memo='7' 
WHERE i.user IS NULL; 
+0

這就是我所要求的(沒有子查詢)。如果可以的話,我會盡力的,但是由於另一種方式起作用,我保留這一點。謝謝你的回答! – aarelovich 2014-11-04 11:29:09

+0

那麼,據我測試這個小提琴[鏈接] http://sqlfiddle.com/#!2/7b332/1(因爲我有同樣的想法)它不起作用:( – Olli 2014-11-04 11:36:12

+1

我的錯。現在修復它。這應該比使用子查詢更快。 – Kickstart 2014-11-04 11:58:19