MySQL - 条件WHERE

时间:2012-08-11 14:46:41

标签: 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,即使我有“AND bulletin.made_by = users.ID”?你知道,我需要在用户仍然存在的所有其他帖子中使用它。

有什么建议吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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表中获取所有记录,无论它是否在第二个表中有匹配的行。