在mysql中我从表中选择喊叫 拥有另一个名为“roleuser”的表的外键 匹配列为 user_id
现在某些行的shouts表中的user_id列为null (实际上并非null,但在mysql中没有插入)
如何使用user_id null显示shouts表的所有行
我正在执行sql语句
SELECT s.*, r.firstname, r.lastname
FROM shouts s left join roleuser r where r.user_id = s.user_id limit 50;
不执行并显示
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where r.user_id = s.user_id limit 50' at line 2
但是使用内部联接,sql执行显示行 在shouts表中只有user_id值。空值未显示。
SELECT s.*, r.firstname, r.lastname
FROM shouts s inner join roleuser r where r.user_id = s.user_id limit 50;
如何显示shouts表中的所有行以及中的null值 在shouts表中user_id为null的firstname和lastname列。 如果没有尽可能用sql可能正在使用存储过程...
由于
Pradyut
答案 0 :(得分:2)
您希望加入ON
条款。
SELECT s.*, r.firstname, r.lastname
FROM roleuser r
LEFT JOIN shouts s
ON s.user_id = r.user_id
WHERE
r.firstname like '%byron%' -- where clause goes here..
LIMIT 50;
答案 1 :(得分:2)
看起来你想要
SELECT s.*, r.firstname, r.lastname
FROM shouts s left join roleuser r ON r.user_id = s.user_id limit 50;
您使用WHERE
代替ON
。
您的第二个查询有效,因为
SELECT s.*, r.firstname, r.lastname
FROM shouts s inner join roleuser r where r.user_id = s.user_id limit 50;
恰好提供与
相同的结果SELECT s.*, r.firstname, r.lastname
FROM shouts s inner join roleuser r ON r.user_id = s.user_id limit 50;
尽管他们的意思略有不同。对于INNER JOIN,ON
是可选的,如果你把它关闭,你得到第一个表中所有行的笛卡尔积和第二个表中的所有行,然后你的WHERE
子句过滤排出所有不匹配的行。如果您将条件放在ON
子句中,则连接仅计算匹配的行,并且您不需要在WHERE
子句中添加条件。在任何一种情况下,内部联接的结果都是相同的。
但是,外连接没有等效的WHERE
子句,因此其ON
子句不是可选的。