LeetCode :. 627の交換賃金

トピックへのリンク:https://leetcode-cn.com/problems/swap-salary/

タイトル

与えられたsalary以下に示すように、テーブル、持つm = 男性f = 女性値。すべてのExchange fmの値(例えば、全てのf値を変更mし、その逆)。それは一つだけアップデート(更新)声明、および中間の一時テーブルが必要です。

あなたが唯一の更新ステートメントを記述することに注意してください、任意のSELECT文を記述しないでください。

例えば:

ID 名前 性別 給料
1 A メートル 2500
2 B F 1500
3 C メートル 5500
4 D F 500

あなたが書かれている更新ステートメントを実行したら、次の表を取得します。

ID 名前 性別 給料
1 A F 2500
2 B メートル 1500
3 C F 5500
4 D メートル 500

出典:ボタン(LeetCode)滞在
:リンクhttps://leetcode-cn.com/problems/swap-salary
すべてのネットワークからの控除が著作権を保有します。商業転載は許可公式、非商用の転載は、ソースを明記してくださいお問い合わせください。

答え

そう書く理由を私は知りません。しかし、それを自分自身を書きました。実際に渡されました。

---- MySQL ----
# Write your MySQL query statement below
update salary set sex = 
case when sex = 'm' then 'f'
     when sex = 'f' then 'm' end  ---- 119ms

Oracleあなたも提出することができますが、実装は、1151ms非常に遅いです。

神の操作を参照してくださいasciiコード変換し、次にによってchar文字列に変換し、666!

---- MySQL ----
update salary set sex = 
char(ascii('f') + ascii('m') - ascii(sex));  ---- 118ms

排他的論理和演算により得た結果。

---- MySQL ----
update salary set sex = 
char(ascii(sex)^ascii('f')^ascii('m'));  ---- 120ms

排他的論理和演算の2つのXOR結果の同じ値がゼロである場合。

使用MySQLif機能は、if(sex = 'm', 'f', 'm')も可能です。

---- MySQL ----
update salary set sex = 
if(sex = 'm', 'f', 'm');

使用機能を。oracledecode

---- oracle ----
update salary set sex = 
decode(sex, 'm', 'f', 'f', 'm');

考えます

使用updateしてcase...when...動的に列の値を設定します。

asciiコード変換、およびその後によってchar文字列に変換されます。

答えるためにXOR演算を使用します。

従来ifdecodeの答え。

おすすめ

転載: www.cnblogs.com/hider/p/11737222.html