我在oracle中编写sql查询。我的要求是我想有条件地更新数据库列的情况下。以下是我使用三张表格的示例数据。为什么这个oracle查询说'单行子查询返回多行'
create table z_product(uuid int, variationvalue varchar(10));
create table z_listprice(productid int, price int);
create table z_variation(masterproductid int, productid int);
insert into z_product values(1,null);
insert into z_product values(2,null);
insert into z_product values(3,null);
insert into z_product values(4,null);
insert into z_product values(5,null);
insert into z_product values(6,null);
insert into z_listprice values(1,10);
insert into z_listprice values(3,20);
insert into z_listprice values(5,10);
insert into z_listprice values(6,19);
insert into z_variation values(2, 1);
insert into z_variation values(2, 3);
insert into z_variation values(4, 5);
insert into z_variation values(4, 6);
我想如果所有的价值相等与“eqaul”如果价格与“notequal”消息不同的“masterproductid”更新“Variation值”列。我试图
查询
UPDATE z_product pr SET pr.variationvalue =
CASE WHEN (SELECT numberofrows FROM (SELECT COUNT(*) AS numberofrows, pricecount , productmasterid
FROM (SELECT COUNT(prl.price) AS pricecount , prl.price AS price, prv.masterproductid AS productmasterid
FROM z_variation prv, z_listprice prl
WHERE prv.masterproductid = (SELECT prv.masterproductid
FROM z_variation prv
WHERE prv.productid = prl.productid GROUP BY prv.masterproductid)
AND prl.productid = prv.productid
GROUP BY prl.price, prv.masterproductid)
GROUP BY pricecount , productmasterid)) = '1'
AND
(SELECT pricecount FROM (SELECT COUNT(*) AS numberofrows, pricecount , productmasterid
FROM (SELECT COUNT(prl.price) AS pricecount , prl.price AS price, prv.masterproductid AS productmasterid
FROM z_variation prv, z_listprice prl
WHERE prv.masterproductid = (SELECT prv.masterproductid
FROM z_variation prv
WHERE prv.productid = prl.productid GROUP BY prv.masterproductid)
AND prl.productid = prv.productid
GROUP BY prl.price, prv.masterproductid)
GROUP BY pricecount , productmasterid)) >1
THEN 'equal'
ELSE 'notequal' END
WHERE pr.uuid = (SELECT prv.masterproductid
FROM z_variation prv, z_listprice prl
WHERE prv.productid = prl.productid
AND pr.uuid = prv.masterproductid GROUP BY prv.masterproductid)
什么是错的这个查询。我在哪里做错了。任何建议将大大appriciated
@bernie我是新来的sql请纠正我,如果我错了 – user964147 2013-02-14 23:45:43
道歉,我的意见是口感不佳。我已经删除它。 – bernie 2013-02-14 23:46:23
错误消息表示您的一个或多个子查询正在返回多个值,因此Oracle不知道要使用哪个值。 – bernie 2013-02-14 23:47:05