oracle—两个子查询单独工作正常,但在join by时“sql命令未正确结束”,除非[explain like i'm five]

deyfvvtc  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(388)

我看了很多类似的帖子,但还是找不到类似的案例,或者我太初级,根本不懂问题中的命令。
我写的命令,但返回 ORA-00933: SQL command not properly ended :

(select product.productid, productname, productprice 
from product, soldvia 
where product.productid = soldvia.productid 
group by product.productid, product.productname, product.productprice 
having sum(soldvia.noofitems) > 3 )

except 

(select product.productid, productname, productprice 
from product, soldvia 
where product.productid = soldvia.productid 
group by product.productid, product.productname, product.productprice 
having count(soldvia.tid) > 1);

当我运行单个select命令时,它们运行良好并返回预期结果。
编辑:我在学习 EXCEPT 因此,使用这个命令,我必须使用这个命令来完成任务。任务是:
检索每个产品的产品id、产品名称和产品价格,这些产品在所有销售事务中销售了三个以上的项目,但其项目在多个销售事务中未销售

6rqinv9w

6rqinv9w1#

except 在甲骨文里不是一个东西;等价的关键字是 minus :如果您更改关键字,您的查询应该可以正常工作。
另一方面,两个查询是完全相同的,所以您可以合并 having 条款:

select p.productid, p.productname, p.productprice 
from product p
inner join soldvia s on p.productid = s.productid 
group by p.productid, p.productname, p.productprice 
having sum(s.noofitems) > 3 and count(s.tid) <= 1

笔记:
始终使用标准的显式联接(与 on 关键字)而不是老式的隐式连接(在 from 子句):新代码中不应使用此旧语法
表别名使查询更易于编写和读取
在多表查询中,总是用列名所属的表限定所有列名,这样查询就不含糊且更容易理解

相关问题