2011-08-31 200 views
3

爲什麼這個sql查詢只顯示結果,如果他們在users_warnings中只有一行?爲什麼我的查詢沒有返回任何結果?

SELECT 
u.id, 
uw.warning 
FROM 
users u 
INNER JOIN users_warnings uw ON (
    u.id = uw.uID 
) 
LIMIT 21 

我想如果有的話,以顯示所有的用戶,而且還搶在users_warnings列「警告」。

回答

6

如果兩個表中都有數據,則INNER JOIN將返回一些內容。
嘗試LEFT JOIN代替:

SELECT u.id, uw.warning FROM users u 
      LEFT JOIN users_warnings uw ON (u.id = uw.uID) 
      LIMIT 21 
+0

這更像是你想要的而不是外連接 – kralco626

6

因爲您使用的是inner join,這需要連接表上存在一行。請嘗試以下操作:

SELECT 
u.id, 
uw.warning 
FROM 
users u 
LEFT JOIN users_warnings uw ON (
    u.id = uw.uID 
) 
LIMIT 21 
2

改變你內心的加盟,左連接,像這樣:

SELECT u.id, uw.warning FROM users u 
       LEFT JOIN users_warnings uw ON (u.id = uw.uID) 
       LIMIT 21 
1
SELECT 
    u.id, 
    IFNULL(uw.warning,'') warning 
FROM 
    (SELECT id FROM users LIMIT 21) u 
    LEFT JOIN users_warnings uw 
    ON u.id = uw.uID 
; 
  • 應該是一個LEFT JOIN不INNER JOIN
  • 重構在嘗試JOIN之前獲取前21個用戶的查詢(更快的查詢)
  • 默認警告爲空字符串,如果用戶沒有警告
相關問題