我正在寻找一种编写执行以下操作的查询的方法:
SELECT NAME
FROM customer_table
WHERE NOT EXISTS (SELECT NAME
FROM order_table
WHERE NAME IN ( 'Mary Smith', 'Albert Angelo', 'Bob Rogers')
)
我希望结果是CUSTOMER_TABLE中不存在的名称列表,这些名称是从ORDER_TABLE上的子选择中选择的(因此订单表中存在的该范围内的值但是#39; t存在于customer_table中)。但是这个查询除了在子查询的范围中列出之外,还获得了CUSTOMER_TABLE中所有其他不匹配的NAME值。
我希望这能够用于大量名称,这些名称太大而无法手工输入。
答案 0 :(得分:0)
您的查询缺少与子查询的关联。
select NAME
from order_table o
where NOT EXISTS (select 1
from customer_table c
where o.name = c.name
)
或者您可以使用left join
来执行此操作。
select o.name
from order_table o
left join customer_table c on o.name = c.name
where c.name is null
答案 1 :(得分:0)
从第一个选择中选择但在CUSTOMER_TABLE中不存在的名称列表
SELECT NAME
FROM order_table
WHERE NAME IN ( 'Mary Smith', 'Albert Angelo', 'Bob Rogers')
EXCEPT
SELECT DISTINCT NAME
FROM CUSTOMER_TABLE
答案 2 :(得分:0)
当您需要customer_table中不存在的名称时,请首先检索您要查找的名称,然后在子查询中编写customer_table,以使用NOT EXISTS过滤这些名称。但是你在外部查询中使用customer_table进行对等。
或者您可以使用CTE选择要比较的所有名称,然后使用customer table过滤它们,如下所示。
WITH CTE
AS
(
SELECT NAME
FROM order_table
WHERE NAME IN ( 'Mary Smith', 'Albert Angelo', 'Bob Rogers')
)
SELECT NAME FROM CTE WHERE NAME NOT IN (SELECT NAME FROM CUSTOMER_TABLE)
希望这个查询可以帮助你@jennifer