我的导师要我使用子查询来执行以下操作:
“显示2006年2月5日或之后下订单的公司的公司名称。”
到目前为止,我有:
SELECT customer_code FROM orders WHERE order_date > '2006-02-05';
这会产生结果,但不是子查询。如何用子查询显示它?
答案 0 :(得分:0)
您有一个查询可以获得某些订单的customer_code
。但是现在你还需要获得那些customer_code
的所有客户的名字。这里有一些提示,
如果您只有customer_code
,您将如何获得客户的姓名?把它写成它自己的简单查询,与订单无关。
如果您有多个customer_code
,现在如何获得客户名称?修改#1中的查询以执行此操作。
最后,您已经有了查询以获取各种订单的大量customer_code
(来自您的问题),因此请使用该查询而不是来自#2的customer_codes
。您问题的查询将成为子查询。
请注意,您也可以使用JOIN获得相同的输出,但您特别询问了子查询。
答案 1 :(得分:0)
试试这个:
SELECT company_name FROM customers
WHERE id IN
(SELECT customer_code FROM orders
WHERE order_date > '2006-02-05');
子查询从订单表中选择customer_code WHERE order_date在2006-02-05之后。然后,这用于在子查询中查找customer表中的company_name WHERE 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 FIDDLE DEMO