我正在尝试将三个select
与union
合并,然后将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');
答案 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,笔记本电脑和打印机。如果是这样,那么union
与union all
具有相同的效果,但它会使查询变慢,或者可能慢得多。
使用union all
代替union
重写所有内容并享受收益。