我在SQL中有一个问题,我正试图解决。我知道答案很简单,但我无法做到。我有两张桌子,一张是顾客,另一张是订单。这两个表使用customer_id连接。问题是列出所有没有订单的客户!问题是在MapInfo Professional(GIS桌面软件)中运行,因此并非每个SQL命令都适用于该程序。换句话说,如果我得到的不仅仅是解决问题的方法,我将感激不尽。
以下是我的想法:
SELECT customer_id
from customers
WHERE order_id not in (select order_id from order)
and customer.customer_id = order.customer_id
答案 0 :(得分:2)
这个怎么样:
SELECT * from customers
WHERE customer_id not in (select customer_id from order)
逻辑是,如果我们没有customer_id,那意味着客户从未下过订单。正如您所提到的,customer_id是公共密钥,因此上面的查询应该获取所需的结果。
答案 1 :(得分:0)
SELECT c.customer_id
FROM customers c
LEFT JOIN orders o ON (o.customer_id = c.customer_id)
WHERE o.order_id IS NULL
答案 2 :(得分:0)
...... NOT EXISTS方式:
SELECT * FROM customers
WHERE NOT EXISTS (
SELECT * FROM orders
WHERE orders.customer_id = customer.customer_id
)
答案 3 :(得分:0)
您的方法存在一些问题:
您的问题很难回答我,因为我不知道MapInfo GIS理解哪个SQL子集,但让我们试试:
select * from customers c where not exists (select * from order o where o.customer_id=c.customer_id)