0

我看了很多类似的帖子,但我仍然找不到类似的案例,或者我太初学者无法理解问题中的命令。

我写但返回的命令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);

当我运行单个选择命令时,它们运行良好并返回预期结果。

编辑:我正在学习EXCEPT使用此命令,因此,我必须使用该命令来完成任务。任务是:

检索在所有销售交易中售出超过三件商品但在超过一次销售交易中未售出的每件商品的商品 ID、商品名称和商品价格

4

1 回答 1

2

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子句中使用逗号):这种旧语法不应在新代码中使用

  • 表别名使查询更易于编写和阅读

  • 在多表查询中,总是用它们所属的表来限定所有列名,这样查询是明确的,更容易理解

于 2020-06-11T09:20:52.670 回答