我试图从vehicles
获取车辆数据,但是如果制造商ID在某个范围内,即使vehicles
内不存在车辆数据,我也需要显示车辆数据。
车辆
group: 1996
make: 8
group: 1996
make: 6
group: 1996
make: 3
请
id: 01
code: 8
description: Audi
id: 02
code: 6
description: BMW
id: 03
code: 2
description: Mercedes
当前查询:
SELECT v.make, vm.description
FROM vehicles v
LEFT JOIN makes vm ON vm.code IN (6,8)
WHERE v.group = 1996 AND v.make IN (8,6)
GROUP BY make
我目前的结果:
make: 8
description: Audi
预期结果:
make: 8
description: Audi
make: 6
description: BMW
答案 0 :(得分:1)
使用公共字段连接两个表,并在WHERE子句中使用IN。
SELECT v.make, vm.description
FROM vehicles v
LEFT JOIN makes vm
ON vm.code = v.make
WHERE v.group = 404
AND v.make IN (8,6);
答案 1 :(得分:1)
在左连接之后使用Where子句可能会将其视为inner join
,我想如果我理解正确的话。你也不需要一个小组。删除where
子句。 where
上的谓词移至inner join
SELECT v.make, vm.description
FROM vehicles v
LEFT JOIN makes vm ON v.make = vm.code and v.Make IN (6,8)
and v.group = '404'
答案 2 :(得分:1)
首先列出makes
并加入vehicles
。此外,当前JOIN中没有任何内容与两个表相关。 JOIN
的{{1}}子句需要一个表达式来比较ON
表中的列和vehicles
表中的列。
makes
但是这仍然不会产生您的示例结果,因为您的查询中的示例结果和某些列不适合测试数据。还有一些重要的东西,你还没告诉我们。
答案 3 :(得分:1)
LEFT JOIN返回左表中的所有记录,以及右表中匹配的记录。如果您想要退回所有品牌,即使没有相应的车辆,您也需要寻找合适的车辆。如果您想要包含没有品牌的车辆,请使用OUTER JOIN。