问题:
我正在尝试找出如何根据 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/