仅使用基于集合的操作从未下订单的任何客户的SQL显示ID

时间:2017-10-11 14:23:50

标签: sql oracle set-based

使用基于集合的操作无法找到任何内容。 不确定我是否在正确的轨道上,但我有2个猜测如何做到这一点,但我不确定我是否接近,或者如果MINUS是正确的基于集合的操作:

SELECT customerid
FROM customer
MINUS
SELECT orderid
FROM custorder
WHERE custorder IS NULL;

SELECT customerid
FROM customer
MINUS
SELECT orderid
FROM custorder;

关于如何改进或改变什么的建议?任何帮助表示赞赏。 有人还可以解释何时在类似的样本上使用UNION,UNION ALL或INTERSECT吗?

另外,我不确定我是否需要2个不同的表格。在此数据库中,其中2个表是CUSTOMER(具有customerid)和CUSTORDER(具有customerid和orderid)。如果您想查看以下内容,请参阅表格值的屏幕截图:https://imgur.com/a/vHMC4

注意:我必须仅使用基于集合的操作以获得完整的信用

2 个答案:

答案 0 :(得分:1)

可能更像是

select customerid 
from customer
MINUS
select customerid
from custorder;

你需要从集合中删除相同类型的值

答案 1 :(得分:1)

我会使用not exists

select c.*
from customer c
where not exists (select 1
                  from custorder co
                  where co.customerid = c.customerid
                 );

您可以使用not inleft join / where执行类似的操作。

基于集合的方法是:

SELECT customerid
FROM customer
MINUS
SELECT customerid
FROM custorder;

第一种方法的优点是您可以从customer中选择其他列。