SQL命令未正确结束 - 使用' As'在联盟

时间:2017-02-09 20:59:48

标签: sql oracle

我正在尝试将三个selectunion合并,然后将where应用于联合结果。我收到的SQL命令未正确结束'我有as U行的错误。

select *
from (
    select A.model, A.price
    from PC A
    union
    select B.model, B.price
    from Laptop B
    union
    select C.model, C.price
    from Printer C
) as U
where U.model in (
    select D.model
    from Product D
    where D.maker = 'B');

除了错误,有没有更好的方法来实现这一目标?我试图从三个表中获取所有结果(两个属性,模型和价格),其中这些表(模型)中的属性与第四个表中的属性(制造商)匹配。

编辑:

我确实让它像以下代码一样工作,但我想简化它。

select A.model, A.price
from PC A
where A.model in (select B.model from Product B where B.maker = 'B')
union
select C.model, C.price
from Laptop C
where C.model in (select D.model from Product D where D.maker = 'B')
union
select E.model, E.price
from Printer E
where E.model in (select F.model from Product F where F.maker = 'B');

2 个答案:

答案 0 :(得分:1)

您只需要表格的名称..(最终命名后您可以指定别名)

  select *
  from (
      select A.model, A.price
      from PC A
      union
      select B.model, B.price
      from Laptop B
      union
      select C.model, C.price
      from Printer C
  )  U
  where U.model in (
      select D.model
      from Product D
      where D.maker = 'B');

对于第二部分..没有其他解决方案单位表...如果你需要一组总和你必须使用联盟..(集理论)

答案 1 :(得分:1)

所以 - 错误:在Oracle中,关键字AS可以在列别名之前使用可选,并且在内联视图别名之前禁止

更好的查询?绝对。您的union似乎是"模型"和"价格"来自三个不相交的列表 - PC,笔记本电脑和打印机。如果是这样,那么unionunion all具有相同的效果,但它会使查询变慢,或者可能慢得多。

使用union all代替union重写所有内容并享受收益。