SQL MINUS结果包含结果中的其他列

时间:2014-02-21 15:05:54

标签: sql sql-server-2008-r2

我使用下面的select语句获取了我需要的记录,这是CARS_PRIMARY表中的CAR_COLOR,它不存在于CAR_SECONDARY表中(也有CAR_COLOR列),但是我现在如何包含其他匹配列结果,因此它返回与

下面的select语句的结果相关联的附加列
SELECT CAR_COLOR
FROM CARS_PRIMARY
MINUS
SELECT CAR_COLOR
FROM CARS_SECONDARY

目前的结果 是

PINK
BLUE
GREEN

我需要

PINK   SUV    4DOOR      
BLUE   CAR    2DOOR
GREEN  TRUCK  2DOOR

2 个答案:

答案 0 :(得分:2)

您可以使用NOT IN代替MINUS

SELECT *
FROM cars_primary
WHERE car_color NOT IN
    (SELECT car_color
    FROM cars_secondary)

或者

SELECT *
FROM cars_primary
WHERE NOT EXISTS 
    (SELECT NULL
    FROM cars_secondary
    WHERE cars_secondary.car_color = cars_primary.car_color)

答案 1 :(得分:1)

MINUS / EXCEPT

SELECT *
FROM CARS_PRIMARY
WHERE CAR_COLOR IN (
   SELECT CAR_COLOR
   FROM CARS_PRIMARY
   EXCEPT
   SELECT CAR_COLOR
   FROM CARS_SECONDARY
);

说明:

我们首先在CARS_PRIMARY中获取一组所有颜色,但不在CARS_SECONDARY中,然后选择CARS_PRIMARY中具有该颜色的所有列。

我使用EXCEPT,但如果MINUS有效,则可以使用它。


LEFT JOIN

SELECT CP.*
FROM CARS_PRIMARY CP
LEFT JOIN CARS_SECONDARY CS 
    ON (CP.CAR_COLOR = CS.CAR_COLOR)
WHERE CS.CAR_COLOR IS NULL;

说明:

我们对颜色上的CARS_PRIMARYCARS_SECONDARY进行外部联接,然后丢弃所有来自CARS_SECONDARY的值的行。


NOT IN

SELECT *
FROM CARS_PRIMARY
WHERE CAR_COLOR NOT IN (
   SELECT CAR_COLOR
   FROM CARS_SECONDARY
);

解释

我们从CARS_PRIMARY中选择颜色不在CARS_SECONDARY的颜色集中的所有列。


NOT EXISTS

SELECT *
FROM CARS_PRIMARY CP
WHERE NOT EXISTS (
   SELECT *
   FROM CARS_SECONDARY CS
   WHERE CS.CAR_COLOR = CP.CAR_COLOR
);

解释

我们从CARS_PRIMARY中选择CARS_SECONDARY中不存在颜色的所有列。