ホームページ >データベース >mysql チュートリアル >列の名前を変更せずに MySQL で列の値を交換するにはどうすればよいですか?

列の名前を変更せずに MySQL で列の値を交換するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-05 21:48:13366ブラウズ

How Can I Swap Column Values in MySQL Without Renaming Columns?

名前を変更せずに 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。