ボーはブログでこの質問を公園を見に頼ま:表は二つのフィールドのIDと名前があり、idが連続空でない非繰り返しで、隣接するテーブルの名前レコードの交換価値にしたい(シングルとダブル二十から二交流)。
さらに、最後の行は、単一のマッチングレコードは、次の行ではなく、最後の更新個々の行に対応していない場合。
ビット平均感じて、私は(SQL Serverなど)、それを達成しようとすると、記録されました。
diososテーブルを作成します。
- 表が存在する場合、それはテーブルを削除され たIF OBJECT_ID(N ' diosos '、N ' U-は')IS ない ヌル ドロップ テーブルdiosos; - 表を作成して 作成 表の diosos(IDのint型、名前のVARCHAR(64));
テーブルにデータを挿入します。
- 插入数据 挿入 に diosos(ID、名前)の値(1、' 1 ' )。 挿入 に diosos(ID、名前)の値(2、' 二つ' ); 挿入 に diosos(ID、名前)の値(3、' 3つ' )。 挿入 に diosos(ID、名前)の値(4、' 4つ' ); 挿入 に diosos(ID、名前)値が(5、' 5 ' )。 挿入 に diosos(ID、名前)の値(6、' 6 ' )。 挿入 に diosos(ID、名前)の値(7、' 7を' ); 挿入 に diosos(ID、名前)の値(8、' 八' ); 挿入 に diosos(ID、名前)の値(9、" 9");
クエリデータは、第1のために見に出ていないです。
- クエリデータ SELECT * から diosos。
隣接リストレコード交換を達成(モノ二十から二エクスチェンジ)、原理は名前とパリティ判定のidモジュロ減算に基づいて行を更新するID隣接する左の外側の関連付けを行います。
- 更新は、2つのExchange間で、交換が不対でない 更新 D1 のSET d1.name = d2.name からdiosos D1が 左 参加diosos D2 ON(d1.idの%2 = 0 と d1.id =(d2.id + 。1) )又は(d1.id %2 = 1。 及び d1.id =(d2.id - 1 )) d2.nameはIS ていないヌル。
成功し、再び照会します。
- 再クエリ SELECT * から diosos。
私は思うが、それでもかなり良い楽しさは、ハッハッハ、ほとんど実際のシーンはありません。
「あなたはこの世界の誰かを信じるように持っているあなたの後ろに痛みを知っている、と人々はシーズンを通してあなたの輝かしいを与えるために喜んでいるでしょう。」