无法进行SQL查询

时间:2018-10-16 05:34:26

标签: sql subquery

我的任务是:
要选择产品的描述,这些产品的价格在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)

数据库的结构

Structure of DB

2 个答案:

答案 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运算符。

,而且由于您正在使用,因此需要分组依据,否则会出现错误

enter image description here

所以回到您的查询,您需要将其更改为:

    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)