繁体   English   中英

根据条件加入MySQL表?

[英]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.field1b.field1存在并且相等的每一行
  • a LEFT JOIN b ON a.field1 = b.field1返回表a每一行,并返回表ba.field1 = b.field1每一行,以及表b上非匹配值的null值。
  • RIGHT JOIN类似于LEFT JOIN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM