0

我的导师希望我使用子查询来执行以下操作:

“显示在 2006 年 2 月 5 日或之后下订单的任何公司的公司名称。”

到目前为止,我有:

选择客户代码
来自订单
WHERE order_date > '2006-02-05';

这会产生结果,但不是子查询。如何用子查询显示这个?

4

2 回答 2

0

您有一个查询,它将为您customer_code提供某些订单的 's。但是现在您还需要获取所有带有这些的客户的名称customer_code。这里有几个小窍门,

  1. 如果您只有他们的客户,您将如何获得他们的姓名customer_code?把它写成它自己的简单查询,与订单无关。

  2. 现在,如果您有多个客户,您如何获得客户的姓名customer_code?修改 #1 中的查询以执行此操作。

  3. 最后,您已经有查询来获取customer_code各种订单的大量 's(来自您的问题),因此请使用该查询而不是customer_codes来自 #2 的查询。您的问题中的查询成为子查询。

请注意,您也可以通过使用 JOIN 来实现相同的输出,但您特别询问了子查询。

于 2013-02-19T17:37:37.743 回答
0

试试这个:

SELECT company_name FROM customers
WHERE id IN 
(SELECT customer_code FROM orders
 WHERE order_date > '2006-02-05'); 

子查询从订单表中选择 customer_code,其中 order_date 在 2006-02-05 之后。然后用于从客户表中选择公司名称,其中在子查询中找到 id。

还有其他方法:

SELECT company_name 
FROM orders, customers
WHERE customer_code = customers.id 
and order_date > '2006-02-05';


SELECT company_name 
FROM customers
JOIN ORDERS
ON customer_code = customers.id 
AND order_date > '2006-02-05'; 


SELECT company_name 
FROM customers
JOIN ORDERS
ON customer_code = customers.id 
WHERE  order_date > '2006-02-05';

最后查询没有子查询。使用连接的选项可能是最常见的形式。 SQL 小提琴演示

于 2013-02-20T02:52:25.863 回答