Oracleの隣接テーブルレコード交換(モノ二十から二交換)

ボーはブログでこの質問を公園を見に頼ま:表は二つのフィールドのIDと名前があり、idが連続空でない非繰り返しである、あなたは、隣接するテーブル名レコードの値を交換したい(シングルとダブル二十から二交流)。

さらに、最後の行は、単一のマッチングレコードは、次の行ではなく、最後の更新個々の行に対応していない場合。

ビット平均感じて、私は(オラクル)それを達成しようとすると、記録されました。

diososテーブルを作成します。

- テーブルが存在する場合、(テスト容易にするための)テーブルを削除
ドロップ ; diososを
 - テーブルを作成する
作成  diosos(上記のid INT、名前VARCHAR64を))。

テーブルにデータを挿入します。

- 插入数据
インサート  diosos(ID、名前)の値1' 1 ' )。
インサート  diosos(ID、名前)の値2' 2 ' )。
挿入  diosos(ID、名前)の値3' 3 ' )。
インサート  diosos(ID、名前)の値4' 4 ' );
挿入  diosos(ID、名前)値が5' 5 ' )。
インサート  diosos(ID、名前)の値6' 6 ' )。
インサート  diosos(ID、名前)の値7' 7 ' )。
インサート  diosos(ID、名前)の値8' 8 ' )。
挿入  diosos(ID、名前)の値9" 9");

クエリデータは、第1のために見に出ていないです。

- クエリデータ
SELECT  *  から diosos。

近隣リストレコード交換(モノ二十から二エクスチェンジ)を達成、原理はパリティ判断のidモジュロ減算の名前は、接続IDと関連付けられている隣接する、合わせて更新された行んです。

- 更新し、2つのExchange間で、交換が不対でない
更新diosos D1
 SETの d1.name = SELECT d2.name
     からdiosos D2
     WHERE(MOD(d1.id、2=  0   d1.id =(d2.id +  1 ))
         又は(MOD(d1.id、2=  1   d1.id =(d2.id -  。1 )) は、
WHERE  EXISTSSELECT d3.id から D3 diosos どこd3.id =(d1.id +  1))。

クエリを再度、成功しました。

- 再クエリ
SELECT  *  から diosos。

私は思うが、それでもかなり良い楽しさは、ハッハッハ、ほとんど実際のシーンはありません。


「すべてのエンディングを合わせ、自分の手です。」

おすすめ

転載: www.cnblogs.com/yanggb/p/11331695.html