0

私は2つのテーブルを持っています:

  • 表 1 の ID、名、姓
  • t1_id、firstname、および lastname を含むテーブル 2
  • 名と姓が一意に一致する場合、SQLクエリ(可能であればPL/SQLではなく)を使用して、table2をtable1のIDで更新したいと考えています。

    ここでの「ユニーク」という言葉は私の問題です:

    update table2 t2
    set t1_id = (select id from table1 t1
        where t1.firstname=t2.lastname and t1.lastname=t2.lastname)
    

    t2 から複数の t1 レコードに一致するたびに、「ORA-01427: 単一行のサブクエリが複数の行を返します」というエラーが発生します。複数の試合で更新しない手がかりはありますか?

    ありがとう。

    4

    4 に答える 4

    0

    考えられる解決策は、一致する行を数えることです:

    update table2 t2
    set t1_id = 
                (
                 select id 
                 from table1 t1
                 where t1.firstname=t2.lastname and t1.lastname=t2.lastname
                )
    where 
    (
     select count(*) 
     from table1 
     where t1.firstname = lastname and t1.lastname= lastname
    ) = 1
    
    于 2013-09-19T16:41:01.377 に答える
    0

    内部結合は機能します (少なくとも SQL Server の場合)。

    update  t1
    set t1.id = t2.id 
    FROM table1 t1 
    INNER JOIN table t2 ON t1.firstname=t2.firstname and t1.lastname=t2.lastname
    
    于 2013-09-19T16:33:33.977 に答える