标量全查询,SELECT INTO语句或VALUES INTO语句的结果不止一行

时间:2014-03-10 13:15:39

标签: sql db2 driver command-line-interface

我的查询有问题,我不知道该怎么办。这是我的查询。我错了。

select prd.product_id,prd.prd_name ,prd.prd_longname ,prd.prd_brand ,prd.prd_picture ,prd.market_comment ,prd.categ ,prd.status_id ,prd.status ,prd.active_stock ,prd.slot_date ,prd.currency ,prd.selling_price ,prd.old_price ,prd.type_of_sell ,prd.catalog_id ,prd.catalog_name ,prd.demo ,prd.demo_id, 
    (select coalesce(count(prd_attribute_id),0) from PRD_ATTRIBUTE where status_id = 1 and product_id = prd.product_id and batch_code <> '0000') as ATTR_CNT  ,
    (select prd_attribute_id from PRD_ATTRIBUTE where product_id = prd.product_id and batch_code = '0000' and status_id = 1),
    (select categ_url from DBNAME.PRD_CATEGORY 
where parameter_id = prd.categ_id)||'/'||    (select prd_url from DBNAME.PRODUCT_URL where product_id = prd.product_id) as CATEG_URL 
from TEMP_WEB_PRD prd 
order by slotdate desc
fetch first 12 rows only

错误:

 [IBM][CLI Driver][DB2/AIX64] SQL0811N  The result of a scalar fullselect, SELECT INTO    statement, or VALUES INTO statement is more than one row.  SQLSTATE=21000

3 个答案:

答案 0 :(得分:5)

错误消息非常明显。您的一个子选择是返回多个行,并且数据库不知道如何处理它。我猜你的数据库是Linux / Unix / Windows上的DB2,基于错误信息,所以这里是你错误的Info Center article

答案 1 :(得分:0)

也许您的一个表中有重复的数据,请确保已检查它。我也有同样的问题,它是由重复的行引起的,它使子查询返回的行多于一个。

答案 2 :(得分:0)

简而言之,这是由于您使用的是“ =”,但子选择语句返回的行重复。

假设您有一个简单的表: 创建表T1(ID int不为空的主键,FID int);

如果FID列多次引用相同的ID值,则以下语句可能返回SQL0811N。

db2“从T1中选择ID,其中ID =(从T1中选择fid)”

ID

SQL0811N标量全查询,SELECT INTO语句或VALUES的结果 INTO语句不止一行。 SQLSTATE = 21000

以下语句将成功运行: db2“从T1中选择ID,其中ID IN(从T1中选择fid)”