ホームページ >データベース >mysql チュートリアル >列の名前を変更せずに MySQL で列の値を交換するにはどうすればよいですか?
名前を変更せずに MySQL のカラム値を交換する
MySQL テーブル内のカラム間で値を交換することは、既存のカラムの順序が変更されていない場合に便利な操作です。より長くお客様の要件に適合します。ただし、テーブル構造を変更して列の名前を変更することは、権限の制限により実現できない場合があります。
代わりに、次の手法を使用できます。
方法 1: 一時変数を使用する
UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;
このメソッドは一時変数を利用して、一方の列の値を保持しながら他方の列を更新します。ただし、NULL 値は効果的に処理されません。
方法 2: Dipin のエレガントなソリューション
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
Dipin のアプローチは、値をエレガントに交換し、値を交換してもしなくても同等に機能します。 NULL 値。
方法 3: を使用するCross-Join
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);
テーブルの構造と制約に基づいて最適な方法を選択することで、列の名前変更や権限の昇格を必要とせずに、列の値を正常に交換できます。
以上が列の名前を変更せずに MySQL で列の値を交換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。