如果结果为空,则从3个表中选择

时间:2015-04-09 07:52:54

标签: mysql

我使用3个表来收集数据。过程如下:

  • 用户将VIN写入表单
  • 在表1中为case_id和基于该vin的国家/地区的脚本搜索 编号
  • 之后他在表号2中使用case_id和country进行搜索 并从那里获得计算ID
  • 根据该计算ID和案例ID,在第3张表中搜索<​​/ li>

我的脚本如下所示:

SELECT 
cases.case_id, 
cases.lastcalc_model_options, 
cases.country, 
calculations.calculation_id, 
calculations.license, 
positions.text 
FROM cases 
INNER JOIN calculations ON(cases.case_id =calculations.case_id 
AND cases.country = calculations.country) 
INNER JOIN positions ON(calculations.case_id = positions.case_id 
AND calculations.calculation_id = positions.calculation_id) 
WHERE vin ='ABCDEFGH'

这个选择工作正确,问题开始时,例如,没有结果与case_id和calculation_id的表位置。

,而不是回馈至少在其他表中找到的所有东西。

有没有办法改变这种komplex SELECT来返回它发现的所有东西,只有当每个条件都为TRUE时才会返回?

2 个答案:

答案 0 :(得分:1)

你的问题是INNER JOIN。使用INNER JOIN,结果只包含所有表中的条目。请尝试使用LEFT JOIN。

SELECT 
cases.case_id, 
cases.lastcalc_model_options, 
cases.country, 
calculations.calculation_id, 
calculations.license, 
positions.text 
FROM cases 
LEFT JOIN calculations ON(cases.case_id =calculations.case_id 
AND cases.country = calculations.country) 
LEFT JOIN positions ON(calculations.case_id = positions.case_id 
AND calculations.calculation_id = positions.calculation_id) 
WHERE vin ='ABCDEFGH'

有关更深入的信息,请参阅this stackoverlow answer

答案 1 :(得分:1)

仅当两个表中的列之间存在匹配时,INNER JOIN才会返回两个表中的行。 您可以尝试LEFT JOIN或FULL OUTER JOIN。