mysql - 根据条件加入 MySQL 表?

标签 mysql join conditional-statements

问题:

我正在尝试找出如何根据 SQL 语句中的条件连接表。我花了一个小时搜索 Google、SO、各种网站和 MYSQL 手册,但我就是找不到适合我想做的事情的正确语法。

我无法发布我正在尝试开始工作的确切查询,但出于简单原因,我将发布一个简化版本。

场景:

假设我有三个表,a = person 表,b = address 表,c = car 表。

b 将始终连接到表 a,因为一个人总是住在一个地址,但表 c 应该只连接如果“car_id”字段中的值大于 0,则为 a,因为有车是可选的。

查询:

SELECT a.firstname, a.lastname, a.gender, a.address_id, b.address_firstline,  b_address_secondline, b.postcode, c.car_manufacturer, c.car_model 
FROM a 
INNER JOIN b ON b.id = a.address_id 
INNER JOIN c ON c.id = a.car_id AND a.car_id > 0 
WHERE a.id = 1

对于 ID 为 1 的人,上面的查询将正常运行,因为他拥有汽车。但是,如果为 ID 为 2 的人运行查询,则查询将返回 0 行,因为她没有汽车。

如何使第二个 JOIN 成为可选的?我试过使用 IF ELSE 语句,但我总是遇到语法错误。有人能在这里指出我正确的方向吗?提前致谢

最佳答案

你应该使用左外连接来连接 c 和 a。

SELECT a.firstname, a.lastname, a.gender, a.address_id, b.address_firstline,  b_address_secondline, b.postcode, c.car_manufacturer, c.car_model 
FROM a 
INNER JOIN b ON b.id = a.address_id 
LEFT OUTER JOIN c ON c.id = a.car_id AND a.car_id > 0 
WHERE a.id = 1

关于mysql - 根据条件加入 MySQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772483/

相关文章:

javascript - ReactJS 返回部分中的条件渲染

mysql - SQL无效使用组函数

mysql - 如何配置 TomEE 和 JPA

php - 使用 iOS 设备连接到 sql 或 oracle 服务器

php - MySQL 获取最受欢迎的标签 ID 组合及其计数

linux - Bash脚本通过相似的字段加入两个csv文件并输出到第三个字段

javascript - 为什么 "current in mailArchive"应该成为关闭的条件?

php - 如何将两个 SQL SELECT 语句合并为一个?

mysql - 如何在 MySql 连接中转换纪元时间

php - 创建插入的条件 SQL 选择语句