Sql server TSQL如何基于不匹配的行从两个表返回结果

Sql server TSQL如何基于不匹配的行从两个表返回结果,sql-server,tsql,Sql Server,Tsql,我有两个简单的问题 从(值('Audi','Red'),('Audi','Blue'),('Audi','Black'),('BMW','Black'),('BMW','Yellow')中选择品牌,颜色作为汽车(品牌,颜色) 从(值('Red')、('Blue')、('Black')、('Yellow')、('White')、('Silver')、('Brown')中选择颜色作为颜色(Color) SQL1返回每个汽车制造商提供的颜色 SQL2返回客户希望购买的汽车的颜色 我想列出每个汽车制造

我有两个简单的问题

从(值('Audi','Red'),('Audi','Blue'),('Audi','Black'),('BMW','Black'),('BMW','Yellow')中选择品牌,颜色作为汽车(品牌,颜色)

从(值('Red')、('Blue')、('Black')、('Yellow')、('White')、('Silver')、('Brown')中选择颜色作为颜色(Color)

SQL1返回每个汽车制造商提供的颜色
SQL2返回客户希望购买的汽车的颜色

我想列出每个汽车制造商无法提供的颜色
例如奥迪白色、奥迪黄色

请帮助我进行TSQL查询


更新:这不是一个重复的问题。我已经尝试过这个答案,但是我没有得到我期望的结果。我希望人们在否决表决或将其标记为重复之前阅读该问题

这就是你想要的答案。当我在注释中输入时,我假设您有一个
Makes
表,但是,由于您没有提供它,我没有使用它

WITH C AS (
    SELECT Color FROM (VALUES('Red'),('Blue'),('Black'),('Yellow'),('White'),('Silver'),('Brown')) AS Colors(Color)),
MC AS (
    SELECT Make, Color FROM (VALUES('Audi','Red'),('Audi','Blue'),('Audi','Black'),('BMW','Black'),('BMW','Yellow')) AS Cars(Make, Color)),
--This is the answer
--I assume you actually have a table for Car makes, however, you haven't incldued that in your data, so enither have I:
M AS (
    SELECT DISTINCT Make
    FROM MC)
SELECT *
FROM C
     CROSS APPLY M
WHERE NOT EXISTS (SELECT *
                  FROM MC
                  WHERE C.Color = MC.Color
                    AND M.Make = MC.Make);

另一个选项是使用除

WITH C AS (
    SELECT Color FROM (VALUES('Red'),('Blue'),('Black'),('Yellow'),('White'),('Silver'),('Brown')) AS Colors(Color)),
MC AS (
    SELECT Make, Color FROM (VALUES('Audi','Red'),('Audi','Blue'),('Audi','Black'),('BMW','Black'),('BMW','Yellow')) AS Cars(Make, Color))

select Make, Color from C
cross join (select distinct Make from MC) as M
except
select Make, Color from MC

你可以尝试类似“从@Tab Alleman的一个可能的副本中选择a.make,b.color”之类的东西。我已经看过了,但是我没有得到我期望的结果。请你能用你链接中建议的方法写下我想要的查询吗?谢谢你的帮助回答