我的导师希望我使用子查询来执行以下操作:
“显示在 2006 年 2 月 5 日或之后下订单的任何公司的公司名称。”
到目前为止,我有:
选择客户代码 来自订单 WHERE order_date > '2006-02-05';
这会产生结果,但不是子查询。如何用子查询显示这个?
您有一个查询,它将为您customer_code
提供某些订单的 's。但是现在您还需要获取所有带有这些的客户的名称customer_code
。这里有几个小窍门,
如果您只有他们的客户,您将如何获得他们的姓名customer_code
?把它写成它自己的简单查询,与订单无关。
现在,如果您有多个客户,您如何获得客户的姓名customer_code
?修改 #1 中的查询以执行此操作。
最后,您已经有查询来获取customer_code
各种订单的大量 's(来自您的问题),因此请使用该查询而不是customer_codes
来自 #2 的查询。您的问题中的查询成为子查询。
请注意,您也可以通过使用 JOIN 来实现相同的输出,但您特别询问了子查询。
试试这个:
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 小提琴演示