2012-08-11 109 views
0

請看,我有這個公告板。這個查詢在這裏工作得很好。MySQL - 有條件的地方

SELECT bulletin.date, 
     bulletin.title, 
     bulletin.content, 
     bulletin.id, 
     bulletin.made_by, 
     users.ID, 
     users.name 
    FROM bulletin, users 
    WHERE bulletin.id = '12345' 
     AND bulletin.made_by = users.ID 
    LIMIT 1 

現在,我遇到了麻煩,因爲當用戶刪除他的帳戶沒有關於所說的人離開了,他是從用戶表中刪除信息。我知道可能有其他方法來解決這個問題,但我現在無法解決這個問題。

所以我問:如何使該查詢返回bulletin.date,bulletin.title和bulletin.content其中bulletin.id等於12345即使我有「和bulletin.made_by = users.ID」 ?你看,我需要爲用戶仍然存在的所有其他帖子。

有什麼建議嗎?

回答

1

使用LEFT OUTER JOIN

SELECT b.date, 
     b.title, 
     b.content, 
     b.id, 
     b.made_by, 
     b.ID, 
     b.name 
FROM bulletin b 
LEFT OUTER JOIN users u on b.made_by = u.ID 
WHERE b.id = '12345' 
LIMIT 1 

this great explanation of joins

+0

謝謝!這真的是一個很好的解釋。 – Egill 2012-08-11 15:41:47

1

目前使用的是INNER JOIN,爲了解決你的問題使用LEFT JOIN

SELECT a.date, 
     a.title, 
     a.content, 
     a.id, 
     a.made_by, 
     a.ID, 
     a.name 
FROM bulletin a 
     LEFT JOIN users c 
      ON a.made_by = c.ID 
WHERE a.id = '12345' 
LIMIT 1 

LEFT JOIN基本上取出由left表中是否有第二個表或不匹配行中的所有記錄。