IN内部加入IN语句

时间:2018-03-02 14:34:40

标签: sql left-join

我试图从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

4 个答案:

答案 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。