首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用联接显示空行

使用联接显示空行
EN

Stack Overflow用户
提问于 2010-03-18 21:58:04
回答 2查看 379关注 0票数 0

在mysql中,我从表中选择具有外键的表,外键指向另一个名为"roleuser“的表,该表的匹配列为user_id

现在某些行的shouts表中的user_id列为空(实际上不是null,但在中没有插入)。

如何显示带user_id null或不带rows表的所有行

我正在执行sql语句。

代码语言:javascript
复制
SELECT s.*, r.firstname, r.lastname
FROM shouts s left join roleuser r where r.user_id = s.user_id limit 50;

它不执行并显示

代码语言:javascript
复制
 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值的行。空白处没有显示。

代码语言:javascript
复制
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,则可能使用存储过程.

谢谢

普拉迪特

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-18 21:59:43

您需要在联接中添加一个ON子句。

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2010-03-18 22:01:10

看上去你想

代码语言:javascript
复制
SELECT s.*, r.firstname, r.lastname 
FROM shouts s left join roleuser r ON r.user_id = s.user_id limit 50;

你用的是WHERE而不是ON

您的第二个查询有效,因为

代码语言:javascript
复制
SELECT s.*, r.firstname, r.lastname 
FROM shouts s inner join roleuser r where r.user_id = s.user_id limit 50; 

只是碰巧给出的结果和

代码语言:javascript
复制
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子句不是可选的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2473611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档