ホームページ >データベース >mysql チュートリアル >テーブル構造を変更せずに MySQL で列の値を効率的に交換するにはどうすればよいですか?
テーブル構造を変更せずに MySQL で列の値を交換する
前述したように、UPDATE を使用して単純な SET X=Y で列の値を交換します。 , Y=X では望ましい結果が得られません。ただし、データと権限の制限に応じて、いくつかの代替アプローチを検討できます。
方法 1: IS NOT NULL チェックを使用した一時変数
この方法では、以下を使用します。ある列の値を他の列と交換しながら保持するための一時変数。ただし、これは両方の値が NULL 以外の場合にのみ機能します。
UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;
方法 2: IS NOT NULL チェックを使用しない一時変数
NULL 値と非 NULL 値の両方:
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
メソッド3: デュアル テーブル更新
もう 1 つの方法では、2 番目のテーブルを使用して値を交換します。これには、主キーが存在する必要があります:
UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;
テスト例
提供されたテスト スキーマの使用:
CREATE TABLE `swap_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `x` varchar(255) DEFAULT NULL, `y` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; INSERT INTO `swap_test` VALUES ('1', 'a', '10'); INSERT INTO `swap_test` VALUES ('2', NULL, '20'); INSERT INTO `swap_test` VALUES ('3', 'c', NULL);
方法 2 の適用正常に交換されるはずです値:
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
出力:
id x y 1 10 a 2 20 NULL 3 NULL c
以上がテーブル構造を変更せずに MySQL で列の値を効率的に交換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。