我的任务是:
要选择产品的描述,这些产品的价格在1988年至少改变了两次
我的代码:
select description from PRODUCT
join price on product.product_id = price.product_id
where price.product_id = (select product_id from price having
count(product_id)>1)
数据库的结构
答案 0 :(得分:1)
您正在使用什么DBMS?
我认为您可以删除与price
的连接,因为您不需要这样做,可以将where子句中的=
运算符更改为in
并为今年,就像这样:
select description
from PRODUCT
where product_id in (
select product_id
from price
where to_char(start_date,'YYYY')='1988'
group by product_id
having count(product_id)>1
)
假设您正在使用Oracle,我认为这可以工作。只需更改特定于您的DBMS的零件,尤其是当年的条件即可。
答案 1 :(得分:0)
假设您正在使用advantureWork2012数据库联接两个表,其中 ProductID是您的加入密钥
由于您将子查询与=一起使用,您将收到此错误
(消息512,级别16,状态1,第8行,子查询返回了多个1 值。当子查询遵循=,!=,<,<=
时,不允许这样做,> =或将子查询用作表达式时。)
您需要改用IN运算符。
,而且由于您正在使用,因此需要分组依据,否则会出现错误
所以回到您的查询,您需要将其更改为:
Select product.description From PRODUCT
Join price On product.product_id = price.product_id
where price.product_id In (select product_id from price group by
product_id having count(product_id)>1 and Year(Start_Date)>1988)