一个简单的嵌套SQL语句

时间:2013-06-23 14:10:04

标签: sql

我在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

4 个答案:

答案 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)

您的方法存在一些问题:

  1. 在customers表中可能没有order_id,但在你引用它的where语句中
  2. where-statement(order.customer_id)中的别名(或table-name)顺序未知,因为其中没有join语句
  3. 如果有加入,您将过滤掉所有没有订单的客户,与您想要的完全相反
  4. 您的问题很难回答我,因为我不知道MapInfo GIS理解哪个SQL子集,但让我们试试:

    select * from customers c where not exists (select * from order o where o.customer_id=c.customer_id)