- PR -

updateコマンドに関して

投稿者投稿内容
オニア
会議室デビュー日: 2003/08/08
投稿数: 13
投稿日時: 2005-03-01 23:04
お世話になります。
sql*plusのupdateについて教えて頂きたいのですが、

乙テーブル
a b c
-- -- --

甲テーブル
A B C
-- -- --

このようなテーブルがありまして、
a=A and b=BならcをCに変更したいのです。

update 乙 set c = こう.C where a = (select こう.A from 甲.こう,甲.コウ where ‥) and b = (select こう.B from 甲.こう,甲.コウ where ‥);

甲は、同テーブル同士を比較して、その結果のA・B列を乙のa・bと比較することになっています。(selectは複数の結果を返してきます)
そこで、set以下で「c = こう.C」とやったら、そんなテーブルはありませんとエラーがでました。

上手くcをCに変更できないでしょうか?
どうぞよろしくお願いいたします。


[ メッセージ編集済み 編集者: オニア 編集日時 2005-03-01 23:06 ]

[ メッセージ編集済み 編集者: オニア 編集日時 2005-03-02 01:25 ]
ピゴナダ
会議室デビュー日: 2004/08/19
投稿数: 12
お住まい・勤務地: 東京都
投稿日時: 2005-03-02 01:23
こんばんは。
ものわかりが悪いので、申し訳ないのですが...

甲テーブル
A B C
---------
1 2 3
4 5 6
7 8 9
0 1 2
---------

乙テーブル
a b c
---------
1 2 3
4 5 0
7 8 0
9 0 1
---------

↓こういう結果を望んでいますか?
乙テーブル
a b c
---------
1 2 3
4 5 6 ← Cを6に更新
7 8 9 ← Cを9に更新
9 0 1
---------

[ メッセージ編集済み 編集者: ピゴナダ 編集日時 2005-03-02 01:38 ]
オニア
会議室デビュー日: 2003/08/08
投稿数: 13
投稿日時: 2005-03-02 01:35
説明がわかりにくくて申し訳ありませんでした。

ピゴナダさんの書いた通りです。
ですが、やっかいなことに、

甲テーブル
a b c
---------
1 2 3
4 5 6
7 8 9
0 1 2
---------

乙テーブル
A B C
---------
1 2 3
4 5 0
7 8 0
7 8 1
---------


乙テーブル
A B C
---------
1 2 3
4 5 6 ← Cを6に更新
7 8 9 ← Cを9に更新
7 8 9 ← Cを9に更新
---------

こうなります。
ユニークな組み合わせではなく、複数存在しています。
どうやったらいいのか、困り果ててます。
よろしくお願いいたします。
ピゴナダ
会議室デビュー日: 2004/08/19
投稿数: 12
お住まい・勤務地: 東京都
投稿日時: 2005-03-02 01:43
もう寝る寸前なのと、自宅にSQLを確認できる環境がないので、
まるっきり自信がありませんが、こんなのではダメでしょうか?

update 乙 set c = 甲.C
where
甲.A || ',' || 甲.B = 乙.a || ',' || 乙.b;

さきほどの私の投稿では、カラム名の大文字/小文字を間違えていたので
修正しておきました。

補足:A,Bのカラムに「,」があると、話はややこしくなります。
本当にもう寝ます。今夜の私からの返信できません。ご検討をお祈りいたします。
(役に立たなくてすいませんでした。)

[ メッセージ編集済み 編集者: ピゴナダ 編集日時 2005-03-02 01:48 ]

[ メッセージ編集済み 編集者: ピゴナダ 編集日時 2005-03-02 01:56 ]

[ メッセージ編集済み 編集者: ピゴナダ 編集日時 2005-03-02 02:25 ]

[ メッセージ編集済み 編集者: ピゴナダ 編集日時 2005-03-02 02:27 ]
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2005-03-02 02:37
>そこで、set以下で「c = こう.C」とやったら、そんなテーブルはありませんとエラーがでました。

このエラーさえ解決すればよいのでしたら、こんなんじゃだめでしょうか?
(実行してませんが。。。)

update 乙 set c = (select 甲.C from 乙,甲 where 甲.A = 乙.a and 甲.B = 乙.b ) where a = (select こう.A from 甲.こう,甲.コウ where ‥) and b = (select こう.B from 甲.こう,甲.コウ where ‥);
すー
会議室デビュー日: 2005/03/02
投稿数: 1
投稿日時: 2005-03-02 04:42
失礼、勘違いしました・・・。

[ メッセージ編集済み 編集者: すー 編集日時 2005-03-02 05:24 ]
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-03-02 09:43
SQL*Plusについて何か分らないので大外ししているかもしれませんが、ちょっと気になった事だけ。
引用:

オニアさんの書き込み (2005-03-02 01:35) より:
乙テーブル
A B C
---------
1 2 3
4 5 6 ← Cを6に更新
7 8 9 ← Cを9に更新
7 8 9 ← Cを9に更新
---------


RDBで、ROW(行)を認識出来ない(全く内容が同じ)レコードって存在できるのでしたっけ?
出来たとしても、何か問題が起こるような気が・・・
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2005-03-02 13:04
記憶が定かで無いけど、確か...というレベルで

コード:
Update 乙
set    乙.c = 
    (
    select 甲.c 
    from   甲 
    where  乙.a = 甲.a 
    and    乙.b = 甲.b
    )
;



_________________
人生変わっちゃうかもよ?OFF会参加者募集中今考えるな、参加してから考えろ。

スキルアップ/キャリアアップ(JOB@IT)