使用子查询更新行涉及Oracle 11g

时间:2013-11-06 17:19:56

标签: sql oracle oracle11g

下面的脚本返回单行子查询返回多行的01427错误。 rownum< 2会更新几行。显而易见的解决方案是使用pl / sql循环,但我正在尝试确定是否只有SQL解决方案。

UPDATE ldl.clens le
   SET master_song_id =
      (SELECT cf.song_id#
         FROM lt.master_songs cf
        WHERE     le.lot_id = cf.lot_id
              AND song_id#_fk =
                     (SELECT msc_songs.song_id#
                        FROM lt.msc_songs
                       WHERE msc_songs.song_name = le.song_name)
---- AND ROWNUM < 2
);

非常感谢任何和所有的帮助和建议!

MD

1 个答案:

答案 0 :(得分:0)

我不确定我是否掌握了表格之间的关系,但如果我这样做了,你可以使用UPDATE以下的地方:

UPDATE ldl.clens le
   SET master_song_id =
      (SELECT cf.song_id#
         FROM lt.master_songs cf
          JOIN lt.msc_songs ms ON (cf.song_id#_fk = ms.song_id#)
         WHERE
              ms.song_name = le.song_name
          AND le.lot_id = cf.lot_id)
;

如果msc_songs.song_namemaster_songs.lot_id会为您提供唯一的master_songs.song_id#,则会有效。