[英]Join MySQL tables based on condition?
问题:
我试图找出如何根据SQL语句中的条件连接表。 我花了一个小时搜索Google,SO,各种网站和MYSQL手册,但我找不到我想要做的正确语法。
我无法发布我正在努力工作的确切查询,但出于简单原因,我将发布简化版本。
场景:
假设我有三个表, a
= person表, b
=地址表和c
= car table。
表b
将始终连接到表a
,因为一个人总是住在一个地址,但是如果'car_id'字段中的值大于0,表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
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。
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
在表c
使用LEFT JOIN
而不是INNER JOIN
。
单边连接在这种情况下工作。
简要说明。
a INNER JOIN b ON a.field1 = b.field1
返回a.field1
和b.field1
存在并且相等的每一行 a LEFT JOIN b ON a.field1 = b.field1
返回表a
每一行,并返回表b
中a.field1 = b.field1
每一行,以及表b
上非匹配值的null
值。 RIGHT JOIN
类似于LEFT JOIN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.