在mysql中,我从表中选择具有外键的表,外键指向另一个名为"roleuser“的表,该表的匹配列为user_id。
现在某些行的shouts表中的user_id列为空(实际上不是null,但在中没有插入)。
如何显示带user_id null或不带rows表的所有行
我正在执行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表中的所有行以及名字列和姓氏列中的空值,其中user_id在shouts表中为空。如果不可能使用sql,则可能使用存储过程.
谢谢
普拉迪特
发布于 2010-03-18 21:59:43
您需要在联接中添加一个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;发布于 2010-03-18 22:01:10
看上去你想
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; 尽管它们的意义略有不同。对于内部联接,ON是可选的,如果不关闭它,则得到第一个表中所有行和第二个表中所有行的笛卡尔积,然后WHERE子句过滤掉所有不匹配的行。如果将条件放在ON子句中,则联接只计算为匹配的行,而不需要在WHERE子句中添加条件。在这两种情况下,对于内部连接来说,结果是相同的。
但是,外部联接没有等效的WHERE子句等效,因此它的ON子句不是可选的。
https://stackoverflow.com/questions/2473611
复制相似问题