- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
MySQL [MySQL] Select 결과 Update하는 SQL 작성
2018.06.20 16:46
【MySQL】Select結果でUpdateするSQLの書き方
2018/03/28
あるテーブルで、姓名カラムを2つ(姓:name_family、名:name_first)と分かれていたのが仕様変更となり、姓名のカラムを name カラム 1つに結合することになりました。
その際、既にインサートされているレコードの「姓」「名」を「姓 名」と全角スペース区切りで結合しつつアップデートする必要がありましたので、備忘録としてその方法をポストします。
Select結果でUpdateする
レコード例
以下の様なテーブルが有るとします。
上記レコードを、下の様にしたい場合の方法です。
Update と Concat
答えを書くと、以下のようになります。
1
2
3
4
5
|
UPDATE
`profiles` AS tbl
SET
tbl.name = CONCAT(tbl.name_family, ' ', tbl.name_first)
WHERE tbl.id = tbl.id;
|
あくまで Update文として書き、SET 句でどのカラムを持ってきて上書きするのかを指定します。
WHERE 句では単に同じ id で、という指定です。
文字列の結合には CONCAT を使用。
CONCAT(tbl.name_family, ' ', tbl.name_first) とすることで「姓+全角スペース+名」を実現させます。
別テーブルの値でアップデートする場合
RequestテーブルのcolumnAを、OrderテーブルのcolumnBの値で上書きする
違うテーブルのレコードを持ってくる場合も以下のようにして実現可能。
requests と orders テーブルを例にしてみます。
1
2
3
4
5
6
7
|
UPDATE
`requests` AS req,
`orders` AS ord
SET
req.columnA = ord.columnB
WHERE
req.id = ord.request_id;
|
なるほどですね。
[MySQL] Select 결과 Update하는 SQL 작성
2018/03/28
테이블에서 성명 컬럼을 2 개 (성 : name_family 이름 : name_first)로 나누어 져 있던 것이 사양 변경이 성명의 컬럼 name 컬럼 하나에 결합 할 수있게되었습니다.
그 때, 이미 삽입 된 레코드의 "성" "이름"을 "이름 성"과 전각 공백으로 구분하여 결합하면서 업데이트해야 했으므로, 비망록으로 그 방법을 게시합니다.
Select 결과 Update하는
레코드 예
다음과 같은 테이블이 있다고합니다.
위 기록을 아래처럼하고 싶다면 방법입니다.
Update 및 Concat
답변을 작성하면 다음과 같이됩니다.
1
2
3
4
5
|
UPDATE
`profiles` AS tbl
SET
tbl.name = CONCAT(tbl.name_family, ' ', tbl.name_first)
WHERE tbl.id = tbl.id;
|
어디 까지나 Update 문장으로 쓰고 SET 절에서 어느 컬럼을 가져와 덮어 쓸 것인지를 지정합니다.
WHERE 절에서는 단순히 같은 id에 지시합니다.
문자열의 결합은 CONCAT를 사용합니다.
CONCAT (tbl.name_family ','tbl.name_first)으로하여 "성 + 전각 스페이스 + 이름"을 실현시킵니다.
다른 테이블의 값을 업데이트하는 경우
Request 테이블 columnA를 Order 테이블 columnB 값으로 덮어 쓰기
다른 테이블의 레코드를 가져 오는 경우도 다음과 같이 실현 가능.
requests과 orders 테이블을 예로 들어 보겠습니다.
1
2
3
4
5
6
7
|
UPDATE
`requests` AS req,
`orders` AS ord
SET
req.columnA = ord.columnB
WHERE
req.id = ord.request_id;
|
과연 네요.
[출처] https://nodoame.net/archives/5687
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.