![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
テーブルがふたつあります。
片方のテーブルA(hoge1)のnameに、もう片方のB(hoge2)のnameをいれたいのです。
テーブルAとBはidでリレーションを張って、それぞれ対応する列にいれたいと思ってます。
tabale A hoge1
id | name | foo
----+-----+----
1 | 1111 | xxxx
2 | 2222 | yyy
3 | 3333 | zzzz
tabale B hoge2
id | name | bar
----+-----+---
1 | 1.net | 1
2 | 2.net | 0
3 | 3.net | 1
期待する結果
tabale A hoge1
id | name | foo
----+-----+----
1 | 1.net | xxxx
2 | 2.net | yyy
3 | 3.net | zzzz
Bに変更はなし
update hoge1 set name = b.name
from hoge2 b , hoge1 a
where a.id = b.id ;
とやるとname列が全て 1.netになってしまい
UPDATE hoge1 SET name = (select b.name from hoge2 b , hoge1 a where b.id = a.id ) ;
ERROR: More than one tuple returned by a subselect used as an expression.
とするとエラーです。(oracleならうまくいくとnetで調べたのですが。。)
どなたかご教授いただけますか。
No.2ベストアンサー
- 回答日時:
すいません、補足です。
UPDATE hoge1 SET name = (select b.name from hoge2 b , hoge1 a where b.id = a.id ) ;
の何が悪いか、という点ですが、
副問い合わせの中で「hoge1 (AS) a 」としてるのに、最初にupdate hoge1 としてるのが
アウトとなるようです。ただこの場合、AS句のスコープも関係してきますので、
こういう場合は素直にテーブル名を書いたほうがよいです。
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQ …
辺りがヒントです。
ありがとうございます。
たしかに、テーブル名を直で書くと動作しますね。
なるほど。ASのスコープが原因なのですね。。。。
結局今回はPGでやっちゃったのですが次回から使おうと思います。
ありがとうございました。
No.1
- 回答日時:
hoge1 を test1
hoge2 を test2
hoge1.name を name1
hoge2.name を name2
に置き換えて読んでください。
update test1 set name1 = (select name2 from test2 where test1.id = test2.id)
where id = (select id from test2 where test1.id = test2.id)
これでうまくいきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- MySQL mysqlの結合について教えてください 1 2022/05/19 15:13
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
plpgsqlのエスケープ文字について
-
select結果でのupdate
-
テーブルからのselectにおいて...
-
講座のある日を抽出したい
-
Access レコードを追加できませ...
-
datapumpの実行方法について
-
[PG]AccessVBAでファイルのイン...
-
INDEX 見積もりについて
-
他ファイルのテーブルの情報を...
-
ORA-00959: 表領域'****'は...
-
INDEXの無効化
-
【Access】外部結合を行う前に...
-
カーソルでのデータ取得
-
統計情報の取得=コミットですか?
-
複数テーブルをひとつのテーブ...
-
アクセスマクロで、csv データ...
-
オラクル DBリンクについて
-
DBA管理者に報告する情報について
-
オラクル クラサバ環境で動作...
-
truncate文で全テーブルを一気...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
テーブルからのselectにおいて...
-
UNIQUEをつけたときのINDEXテー...
-
前方一致が動的に変更される場...
-
3つのテーブルの処理について
-
SQL文作成のお願い
-
postgreSQLのオートナンバーに...
-
クエリアナライザのsp_helpコマ...
-
SQLで検索結果の記事を表示したい
-
SQL SELECT文 別テーブルのレコ...
-
PostgressからMySQL(MariaDB)...
-
plpgsqlのエスケープ文字について
-
近い時間によるテーブル結合
-
マルチテーブル・インサート
-
次の条件を満たすSQL文をご...
-
postgreSQLの正規表現
-
講座のある日を抽出したい
-
特定カラムの値を変更したいの...
-
SQL文の実行に苦労しています。
-
phpPgAdminからSQL文を発行し、...
おすすめ情報