两个共有2列的SQL表,需要表A中但不在表B中的记录(第1列在两个列中相同但不同于第2列)

时间:2017-07-31 20:07:35

标签: sql oracle

我有两个表,tableA和tableB。 它们都有列(vehicle_make和vehicle_model)。

我需要来自tableA的车辆的所有品牌/型号,而不是表B中的。

基本上我需要找到新的品牌和型号。 tableB目前我在我的项目中使用,tableA是美国所有车辆的通用数据。

3 个答案:

答案 0 :(得分:0)

您可以使用NOT IN运算符。

SELECT DISTINCT vehicle_make, vehicle_model
FROM tableA
WHERE (vehicle_make || vehicle_model) NOT IN 
      (SELECT DISTINCT (vehicle_make || vehicle_model)
       FROM tableB)

答案 1 :(得分:0)

使用coorlated子查询:通常效率最高的存在。

SELECT vehicle_make, vehicle_model
FROM tableA A
WHERE Not Exists (SELECT * 
                  FROM tableB 
                  WHERE A.vehicle_make = B.Vehicle_make
                    and A.vehicle_model = B.Vehicle_model

使用外部联接(如果您需要表B中的数据存在的记录...就像每个品牌/型号的B记录数一样

SELECT A.vehicle_make, A.vehicle_model, count(B.*)
FROM tableA A
LEFT JOIN tableB B
 on A.vehicle_make = B.Vehicle_make
and A.vehicle_model = B.Vehicle_model
WHERE B.Vehicle_make is null
GROUP BY A.vehicle_make, A.vehicle_model

In有效(除非你可以有空值)

答案 2 :(得分:0)

select a.*
from TableA a
left outer join TableB b 
       on a.vehicle_make = b.vehicle_make 
      and a.vehicle_model = b.vehicle_model
where b.vehicle_make is null