1

2つの異なるテーブル内の2つの文字列の最長の一致を比較して一致させ、最も近い一致がある場合は1つの値を更新する必要があります。

Table 1     Table 2
stack1     stack2
ABCDEFG    ABC
GHIJKLM    ABCDE
PQRSUVW    ABCDEF

これらの2つのテーブルを比較し、最も近いテーブルと一致させ、表1の最初の行をABCDEFに最も近いものとして更新する必要があります。誰か助けてください。私はここで立ち往生しています。

これが私の質問です

UPDATE table1 A 
   SET A.stack1 = (SELECT DISTINCT B.stack2 
                     FROM table2 B 
                    WHERE A.stack1 LIKE CONCAT(B.stack2,'%')) 
 WHERE name = 'name';

このクエリでは、次のようなエラーが発生します

ORA-01427:単一行のサブクエリが複数の行を返します

4

2 に答える 2

1

サブクエリが単一の一致(最長のもの)のみを返すようにする必要があります。あなたの場合、MAXはそれを行うべきです。

UPDATE table1 A 
SET A.stack1 = (SELECT Max( B.stack2 )
                 FROM table2 B 
                WHERE A.stack1 LIKE CONCAT(B.stack2,'%')) 
WHERE name = 'name';

また、何も一致しない場合を考える必要があります。

于 2011-06-17T03:39:22.583 に答える
0

ORA-01427エラーは、サブクエリが複数の値を返していることを示してい DISTINCTます。

複数の異なる値を返すケースを修正する必要があります。MAXこれは、またはのような集計関数を使用する場合がありますが、MIN詳細がない場合は、その推奨を行うことを躊躇します。

于 2011-06-17T03:36:33.563 に答える