今回は仕事でOracleを利用することがあったので、少し複雑なupdate文の作成方法をまとめますね!
あまり直接SQLを書いてupdate
とかdelete
とかをすることなかったし調べました~
「とりあえず分からんし、エラーがたくさん出て困っとるんだよー」って時には1行1行実行していくのがコツかな…と思います!
常に動作できる状態を確認しつつ進めていけばどこに問題が出るのかがすぐわかるんです!
なので、今回は基本的なupdate文の紹介をしてから、joinをした時のupdate文、そして最後にcase文を追加したものの説明を順番にしていきましょうか!
Table of Contents
概要
基本的なupdate
文というのは次となります。
UPDATE テーブル名
SET 列名1=値1, 列名1=値2 ・・・
(WHERE 修飾)
これは通常のupdate
になるのですが、joinを利用すると変わります
JOINをする場合
Oracleの場合はUpdate文の中にJOINは書けないようなので、サブクエリ内でJOINしてきます!
と言うことでこんな感じ
UPDATE
(
SELECT
USERS.USER_NAME USER_NAME,
CLUBS.CLUB_NAME CLUB_NAME
FROM
USERS
LEFT OUTER JOIN CLUBS
ON USERS.CLUB_ID = CLUBS.ID
)
SET
USER_NAME = '結合された名前を変更'
Code language: JavaScript (javascript)
あーなんか、いい感じの例文にならないなあ~
ID | NAME | CLUB_ID |
1 | 山田 太郎 | 1 |
2 | 山本 太郎 | 2 |
3 | 鈴木 太郎 | 2 |
ID | NAME |
1 | 野球 |
2 | サッカー |
とりあえず↑みたいなテーブルがあると想定してください。
ほんで、結合してUSERSの名前を変更する
ただ、これだけだとビミョーですわな
と言うことでここでCASEを追加してそれっポイUPDATEしてみましょ
JOINとCASEを使ってみる
テーブルの内容はさっきとおんなじ感じで想定しますね~
UPDATE
(
SELECT
USERS.USER_NAME USER_NAME,
CLUBS.CLUB_NAME CLUB_NAME
FROM
USERS
LEFT OUTER JOIN CLUBS
ON USERS.CLUB_ID = CLUBS.ID
)
SET
USER_NAME = (
CASE
WHEN CLUB_NAME = '野球' THEN '野球小僧'
WHEN CLUB_NAME = 'サッカー' THEN 'サッカー小僧'
WHEN CLUB_NAME IS NULL THEN 'クラブは行っていません小僧'
ELSE '秘密のクラブ'
END
);
Code language: PHP (php)
こんな感じですわな!
まあこれもユーザーの名前を変えるなんてことはないけど、こんな形でUPDATEができるんですよってことで許してくださいな。と
まとめ
SQLってどんどん書いていかないと忘れたりするし、パパッとかける人かっこいいよね。もちろん簡単にUPDATEとかDELETEとかできへんが…
最近触る機会が多いからちゃんとこの機会に覚えとこ
今回は以下の記事参考にしました~