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

标签 mysql

我正在使用 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/

相关文章:

mysql - SQL如何对匹配值的数据进行分组?

mysql - MySQL中如何转换这个特殊符号?

php - mysql php问题: no error message despite error_reporting(E_ALL) line

mysql - 如何删除 mysql 数据库中表中的所有行,其中一列的值 = 0?

java - 将 MySql 日期时间映射到 hibernate

mysql - 根据另一个表中的查找值删除表中的行

mysql - 返回所有行匹配条件的值

php - Laravel 选择左连接新数组索引中的所有列

mysql - SQL查询解决

mysql - 使用 sails.js 检查数据库中已有的用户