【Oracle 11g】テーブル結合とCASEを含んだUPDATE文を作成してみる

今回は仕事でOracleを利用することがあったので、少し複雑なupdate文の作成方法をまとめますね!

あまり直接SQLを書いてupdateとかdeleteとかをすることなかったし調べました~

「とりあえず分からんし、エラーがたくさん出て困っとるんだよー」って時には1行1行実行していくのがコツかな…と思います!

常に動作できる状態を確認しつつ進めていけばどこに問題が出るのかがすぐわかるんです!

なので、今回は基本的なupdate文の紹介をしてから、joinをした時のupdate文、そして最後にcase文を追加したものの説明を順番にしていきましょうか!

概要

基本的な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)

あーなんか、いい感じの例文にならないなあ~

IDNAMECLUB_ID
1山田 太郎1
2山本 太郎2
3鈴木 太郎2
USERS
IDNAME
1野球
2サッカー
CLUBS

とりあえず↑みたいなテーブルがあると想定してください。

ほんで、結合して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とかできへんが…

最近触る機会が多いからちゃんとこの機会に覚えとこ

今回は以下の記事参考にしました~

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA