在子查询中使用别名检索结果时出错

时间:2017-02-20 19:30:42

标签: sql oracle subquery alias

以下是方案和问题:

马库斯也在国际旅行,他有兴趣考虑购买一些产品。由于他的雇主几乎没有通知他将他送到世界各地,他只想考虑一个产品,如果它在所有商店位置都可用,并且对某些但不是所有商店位置都有的产品不感兴趣。这样,如果他决定购买产品,他有保证可以在任何地点购买。最后,他有兴趣查看符合其标准的每种产品的尺寸选项。

我在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编写查询。

1 个答案:

答案 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