我正在使用 3 个表从中收集数据。过程如下:
- 用户将 VIN 写入表格
- 根据该 vin 在表 1 中搜索 case_id 和国家/地区的脚本 数
- 之后,他使用 case_id 和 country 在表 2 中进行搜索 并从那里获取计算 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 的结果时,问题就开始了。它不会返回至少在其他表中找到的所有内容,而是返回任何内容。
有没有办法改变这种复杂的 SELECT 以返回它找到的所有内容,而不是仅在每个条件都为真时才返回某些内容?
最佳答案
您的问题是 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以获得更深入的信息。
关于mysql - 如果结果为空,则从 3 个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29532847/