首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内连接应该是可选的

内连接应该是可选的
EN

Stack Overflow用户
提问于 2019-09-26 20:28:30
回答 1查看 70关注 0票数 1

在我的表personal中,我想加入表languagespayment

代码语言:javascript
复制
SELECT GROUP_CONCAT(DISTINCT languages.language) AS languages, personal.city, payment.before 
FROM personal 
INNER JOIN languages ON languages.uid = personal.uid 
INNER JOIN payment ON payment.uid = personal.uid 
WHERE personal.uid = 36

返回我的查询如下:

代码语言:javascript
复制
| languages   |  city          | before  |
|-------------|:--------------:|--------:|
| NULL        |  NULL          | NULL    |

这是因为我的表payment中没有记录。有没有办法使我的代码的第4行是可选的?因此,如果payment.uid = personal.uid是假的,结果应该如下所示:

代码语言:javascript
复制
| languages   |  city          | before  |
|-------------|:--------------:|--------:|
| English     |  Chicago       | NULL    |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-26 20:29:45

使用LEFT JOIN,这样就可以得到一行:

代码语言:javascript
复制
SELECT GROUP_CONCAT(DISTINCT l.language) AS languages, p.city, pa.before 
FROM personal p LEFT JOIN
     languages l
     ON l.uid = p.uid LEFT JOIN
     payment pa
     ON pa.uid = p.uid 
WHERE p.uid = 36
GROUP BY p.city, pa.before;

备注:

  • 表别名使查询更易于编写和读取。
  • 您有一个聚集查询,其中的SELECT中没有包含在GROUP BY中的列。这是错误的SQL --而且在最近版本的MySQL中不允许使用(使用默认设置)。学习如何正确地构造GROUP BY查询。如果没有与p.uid = 36匹配的行,则
  • 将不会返回任何行。但是,如果存在行,即使其他表中没有行,它也会返回一行。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58124308

复制
相关文章

相似问题

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