我一直在试图弄清楚如何选择与表之间的一个id相关的数据而不将其限制在连接表中。我尝试使用UNION,内部联接,JOIN,但它限制我显示仅在两个表中的记录。例如:
Table 1 (users)
id | name | register
1 | John | 2014-03-01
2 | Kate | 2014-03-02
等。
Table 2 (birthdays by example)
id | user | birthday
1 | 1 | 1989-09-09
请注意,凯特在生日表上没有记录,如果我这样做:
SELECT U.id, name, register, B.birthday FROM users as U INNER JOIN birthday as B ON B.user = U.id
它只显示JOHN数据,我想选择所有用户,如果连接表上不存在记录,仍然可以选择我的所有用户,排序:
id | name | register | birthday
1 | John | 2014-03-01 | 1989-09-09
2 | kate | 2014-03-02 | null or ''
3
4
等
很抱歉,如果这是一个愚蠢的问题,但我没有找到这个问题的亮点。我很感激你的帮助。
此致
答案 0 :(得分:2)
您需要LEFT OUTER JOIN
而非普通JOIN
(也称为INNER JOIN
),如下所示:
SELECT U.id, name, register, B.birthday
FROM users as U
LEFT JOIN birthday as B
ON B.user = U.id
users
和birthday
表之间的LEFT JOIN将包含“左”表(用户)的所有记录,即使连接条件未在“右”中找到任何匹配记录桌子(生日)。
这篇关于代码项目的优秀文章将为您提供很多帮助:Visual Representation of SQL Joins。
所有JOIN类型摘要:
注意:Mysql不支持FULL OUTER JOIN,但可以模拟它。有用的文章:
答案 1 :(得分:0)
使用left outer join代替inner join ..
SELECT U.id, name, register, B.birthday
FROM users as U left join birthday as B ON B.user = U.id