質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

964閲覧

SQL内で抽出後のデータを修正する方法

b_b_b

総合スコア32

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/04/15 13:52

編集2018/04/15 14:21

下記のSQL文に対して、WHERE句の抽出条件によって、
Cの値が重複していれば、一行にしてCの値をNULLに変えたいです。
どの様に書き直せばいいでしょうか?
ご教授いただければ幸いです。

sql

1SELECT T1.A,T2.B,T2.C 2FROM Table1 T1,Table2 T2 3WHERE T1.***=T2.***

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sousuke

2018/04/15 14:00

「Cの値が一つ」とはどういう意味ですか?「Cの値が2つ以上」の場合というのが想像できません。またNULLを入れたいとありますがどこに入れるのですか?
b_b_b

2018/04/15 14:09

すみません、複数のTABLEでSELECTをかけているという前提でした。
sazi

2018/04/15 14:09

Cはどっちのテーブル?
b_b_b

2018/04/15 14:11

CはT2のテーブルです。
sousuke

2018/04/15 14:13

相変わらず意味が不明です。Cの値が複数とは「whereで検索した2行以上返る」という意味ですか?もしそうだと仮定して片方に値があって片方NULLの場合は?すべて値が同じ場合は?
b_b_b

2018/04/15 14:19

Cの値が重複しているレコードを一行にして、その値をNULLにしたいです。
sazi

2018/04/15 14:21

回答しちゃったけど、外している可能性大。前の質問もそうですけど、質問が不明瞭です。もっと具体的な内容でお願いします。
sazi

2018/04/15 14:21

>Cの値が重複しているレコードを一行にして データ削除するってことですか?
b_b_b

2018/04/15 14:23

そうですね。
sazi

2018/04/15 14:23

Cの値が重複しているというのは何に対してですか?テーブル全体でというのはあり得ないでしょうし。
sazi

2018/04/15 14:25

複数重複していたとして、どのデータを削除して、どのデータを残すかの条件は?
sousuke

2018/04/15 14:33

テーブルを手書きで書いたほうがいいです。質問者さんは多分言葉では説明できないと思います。この期に及んでも何をしたいのかよくわかりません。
Orlofsky

2018/04/16 00:36

教授と教示の違いも理解できた方が良いです。
guest

回答2

0

ベストアンサー

なんか条件が不明瞭なんですが。

A,Bに対してCの値が、複数存在すれば

と仮定して、更新なのでupdateします。

SQL

1update ( 2 select T2.* 3 from Table1 T1 inner join Table2 T2 on T1.***=T2.*** 4 where (A,B) in ( 5 select A,B 6 from Table1 T1 inner join Table2 T2 on T1.***=T2.*** 7 group by A,B 8 having count(distinct C)>1 9 ) 10) 11set c=Null

投稿2018/04/15 14:06

編集2018/04/15 14:18
sazi

総合スコア25076

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな風に書いてください。全くわかりません。

sql

1SELECT T1.A,T2.B,T2.C 2FROM Table1 T1,Table2 T2 3WHERE T1.***=T2.***

このsqlで得られた結果が

ABC
001
001
002
002
00NULL

こうだとします。これが

ABC
00NULL
00NULL
00NULL
00NULL
00NULL

こうなるんですか?
それとも「1」が残って他がNULL?
それとも「2」が残って他がNULL?

投稿2018/04/15 14:37

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問