【发布时间】:2018-10-05 17:11:08
【问题描述】:
我正在将查询从 WHERE 部分中的子查询转换为 FROM 部分。
据我了解,FROM 子句将返回一个表,我称之为“product_locations”,然后我的外部查询可以从该表中检索信息。我现在看不到外部查询是否正常工作,因为我遇到了一个错误,我错过了一个右括号。 在这一点上,我认为我的主要问题是不了解如何正确识别构成子查询的 IN 子句的两个部分。
这是原始查询:
SELECT size_option,
product.product_name
FROM sizes
JOIN available_in ON sizes.sized_id = available_in.sizes_id
JOIN product ON product.product_id = available_in.product_id
WHERE (SELECT COUNT (store_name)
FROM store_location IN (SELECT COUNT (store_location_id)
FROM sells
JOIN product ON sells.product_id = product.product_id
GROUP BY sells.store_location)
这是我正在尝试的查询:
SELECT size_option,
product_location.product_name
FROM (SELECT COUNT(store_name)
FROM store_location) IN (SELECT COUNT (store_location_id)
FROM sells
JOIN product ON sells.product_id = product.product_id
GROUP BY sells.store_location_id) product_location
JOIN sizes ON sizes.size_option = product_location.size_option
JOIN available_in ON sizes.sizes_id = available_in.sizes_id
JOIN product ON product.product_id = available_in.product_id
以及我得到的错误:
SELECT size_option,
product_location.product_name
FROM (SELECT COUNT(store_name)
FROM store_location) IN (SELECT COUNT (store_location_id)
FROM sells
JOIN product ON sells.product_id = product.product_id
GROUP BY sells.store_location_id) product_location
JOIN sizes ON sizes.size_option = product_location.size_option
JOIN available_in ON sizes.sizes_id = available_in.sizes_id
JOIN product ON product.product_id = available_in.product_id
Error at Command Line : 4 Column : 31
Error report -
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
【问题讨论】:
-
IN在FROM子句中无法识别。很难说你的意图是什么。 -
FROM子句中的查询称为“表表达式”。表表达式必须命名,如select * from (select ...) x。查看x? -
现在,在原始查询中,子查询是“相关”子查询。典型的表格表达式不接受这些,除非您创建“横向表格表达式”。分分钟越来越难看。你为什么要首先这样做?
-
其目的是显示所有位置可用的所有产品。 IN 语句的目的是,第一个 COUNT
(SELECT COUNT(store_name) FROM store_location)计算商店数量,第二个(SELECT COUNT (store_location_id) FROM sells JOIN product ON sells.product_id = product.product_id GROUP BY sells.store_location_id) product_location计算每个产品可用的商店数量,因此如果第二个查询中包含第一个数字,则结果将被选中。 -
@TheImpaler 不幸的是,我想这样做是因为我的研究生院数据库教授是一个虐待狂。我是一名网络人,正在学习数据库课程!
标签: sql oracle oracle11g subquery