如果记录出现在连接表上,Mysql在两个表之间选择而不限制

时间:2014-03-07 06:07:02

标签: mysql

我一直在试图弄清楚如何选择与表之间的一个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

很抱歉,如果这是一个愚蠢的问题,但我没有找到这个问题的亮点。我很感激你的帮助。

此致

2 个答案:

答案 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

usersbirthday表之间的LEFT JOIN将包含“左”表(用户)的所有记录,即使连接条件未在“右”中找到任何匹配记录桌子(生日)。

这篇关于代码项目的优秀文章将为您提供很多帮助:Visual Representation of SQL Joins

所有JOIN类型摘要

enter image description here

注意: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