我有两个表,有两列作为orderid和customerid的订单,以及有两列作为customerid和location的客户。
我想要做的是找到表中没有订单的客户中的所有客户ID。例如,Customers.customerid = {A,B,C,D},Orders.customerid = {A,B,C},猜测我需要做的只是从客户那里获得但不存在于订单中。为实现这一目标,我说,
select customerid from Customers where customerid not exists (select customerid from Orders)
但它什么也没有返回..我的逻辑非常简单,首先在表Orders中获取所有customerid,然后从表Orders中获取customerIds中不存在的那些。我不明白为什么这是错的..
我稍后试过,它有效。愿任何人都可以帮助我吗?
select customerid from Customers as c where customerid not exists(select customerid from orders as o where c.customerid = o.customerid)
为什么我要添加c.customerid = o.customerid?
答案 0 :(得分:1)
为什么我必须添加c.customerid = o.customerid?
因为您在数据库中为两列使用相同的名称,这并不意味着在它们之间强制执行或假设任何特定关系。
您需要添加customerid
以指定您对这两列相等的特定条件感兴趣。
但语言也允许允许任何其他相关条件。例如。你可以写一个查询:
{{1}}
如果考虑按其{{1}}值排序的客户(不是这是编写此查询的最佳方式,它只是一个灵活性的演示),那么会找到“第一”客户
你的第一个查询实际上是“给我所有行来自Customer表,只要订单表中不存在任何行” - 这也是一个非常有效的要求,但不是你想要的 - 您打算执行某种形式的关联,这是您在第二次查询中所做的。
答案 1 :(得分:0)
Try below query :
SELECT customerid from Customers C WHERE NOT EXISTS
(
SELECT 1 FROM orders O WHERE C.customerid = O.customerid
)
答案 2 :(得分:0)
@Damien_The_Unbeliever给出了正确的解释,你需要尝试这样的
我为2个表创建了一些数据
CREATE TABLE #Orders
(orderid varchar(10), customerid varchar(10))
insert into #Orders values
('venkat','a'),
('raj','b'),
('mahes','c')
CREATE TABLE #Customers
(customerid varchar(10), [location] varchar(10))
insert into #Customers values
('a','and'),
('b','bar'),
('c','board'),
('D','board1')
SELECT cu.customerid from #Customers CU WHERE NOT EXISTS
(
SELECT 1 FROM #orders b WHERE Cu.customerid = b.customerid
)
输出
customerid
D
答案 3 :(得分:0)
你需要的是
select c.customerid from customer c inner join order o on c.customerid = o.customerid where c.customerid not in (select od.customerid from order od)
您无法加入,无法访问2个表的数据。