以下是方案和问题:
马库斯也在国际旅行,他有兴趣考虑购买一些产品。由于他的雇主几乎没有通知他将他送到世界各地,他只想考虑一个产品,如果它在所有商店位置都可用,并且对某些但不是所有商店位置都有的产品不感兴趣。这样,如果他决定购买产品,他有保证可以在任何地点购买。最后,他有兴趣查看符合其标准的每种产品的尺寸选项。
我在WHERE子句中使用了子查询,并且输出只显示了2个产品(在所有商店位置),并带有相应的大小选项:
SELECT SO.size_option,Product.product_name
FROM (SELECT Product.product_id
FROM Product
JOIN SELLS ON Sells.product_id = Product.product_id
GROUP BY Product.product_id
HAVING COUNT(Sells.store_location_id) = 5)SO
JOIN Available_in ON Available_in.sizes_id = SO.sizes_id
JOIN Product ON Product.product_id = Available_in.product_id;
对于下一个问题,我必须使用Alias重新排列子查询并将子查询添加到FROM子句,这就是我所做的:
cts:values(
cts:element-reference(xs:QName("entityName")),
(),
(),
cts:collection-query("basedata")
)
我将Sizes表重命名为别名的SO。我收到一个错误,SO.sizes_id是一个无效的标识符。当我在Where子句中使用它但不使用FROM子句时,这有用。希望得到一些如何解决这个问题的帮助!
我正在使用Oracle SQL Developer编写查询。
答案 0 :(得分:1)
您在subselect中没有size_id选择,因此您无法使用连接
SELECT SO.size_option, Product.product_name
FROM (SELECT Product.product_id, ????? size_id ????? <<<<<<<<<<<<<<<
FROM Product
JOIN SELLS ON Sells.product_id = Product.product_id
GROUP BY Product.product_id
HAVING COUNT(Sells.store_location_id) = 5) SO
JOIN Available_in ON Available_in.sizes_id = SO.sizes_id
JOIN Product ON Product.product_id = Available_in.product_id;
在SO的join中,您只能使用在生成from()SO表
的子选择中选择的列并且正如JuanCarlosOropeze所建议的那样,你还没有size_option