人に聞けない痔の悩み、これでスッキリ >>

挿入するフィールドの内1つだけを他のテーブルから取ってきた値を使いたいのですが、
insert into table1
(field1, field2, field3)
values('a', (select field2 from table2 where field4='xxx'), 'b');
Oracleだと↑の書き方でいけるのですが、PostgreSQL(6.5.3)だとエラーになってしまいます。
2回もDBにアクセスしにいくのはいやなので、1文で書きたいです。上記以外で他の書き方をご存知でしたら教えてください。よろしくお願いします。

A 回答 (1件)

ポストグレは使ったこと無いんで違うかもしれませんが、以下のSQLでどうでしょ?



insert into table1 (field1, field2, field3)
select 'a', field2, 'b'
from table2
where field4='xxx';
    • good
    • 5
この回答へのお礼

いけました!ありがとうございました。ほんとに。助かりました。
そういう書き方があるのですねえ。

お礼日時:2001/11/04 21:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qselect insertで複数テーブルから値を取得したい

環境:oracle9i

select insertで、2つのテーブルから値を取得して、1つのテーブルにinsertすることは可能でしょうか?
たとえば、以下の場合、どのようなSQL文を書けばよいか、アドバイスいただけますでしょうか。
よろしくお願いします。

insertしたいテーブル:A
Aテーブルの項目:o,p,q,r,s,t

値を取得するテーブル:B,C
Bテーブルの項目:o,p,q,r
Cテーブルの項目:o,p,s,t

oとpが主キーになっていて、それらが一致するBとCのデータを
あわせて、Aにinsertしたいと思っています。

insert into A(o,p,q,r,s,t)
select
このあと、どのように書けばよいのかがわかりません。

Aベストアンサー

insert into A(o,p,q,r,s,t)
select B.o,B.p,B.q,B.r,C.s,C.t
from B,C
where B.o=C.o and B.p=C.p;

って感じかと。普通に問合せ文を書くだけですよ。
問合せ文自体は、内部結合だろうが外部結合だろうが何でもOK。

QDBをコピーし一部変更して追加するPL/SQL文

オラクルPL/SQL超初心者です。
住所録DBで1項目だけ変更し、あとはすべて同じ内容でその住所録DBに追加するプロシージャーのSQL文の作成例をご教示下さい。(データは約8,000件あります)
例えば下記のように「確認日」だけ更新して追加するには・・・

イメージとしては (変更項目)
氏名 住所 電話  年齢 確認日
-------------------------------------------
AAA aaa xxxx xx 2003/10/31
DDD bbbb xxxx xx 2003/10/31
FFF ccc xxxx xx 2003/10/31
HHH ddd xxxx xx 2003/10/31
TTT fff xxxx xx 2003/10/31
--(追加データ)
AAA aaa xxxx xx 2004/02/11
DDD bbbb xxxx xx 2004/02/11
FFF ccc xxxx xx 2004/02/11
HHH ddd xxxx xx 2004/02/11
TTT fff xxxx xx 2004/02/11

環境はOracle9i、WindowsXP、ツールはSI Object Browserです。

オラクルPL/SQL超初心者です。
住所録DBで1項目だけ変更し、あとはすべて同じ内容でその住所録DBに追加するプロシージャーのSQL文の作成例をご教示下さい。(データは約8,000件あります)
例えば下記のように「確認日」だけ更新して追加するには・・・

イメージとしては (変更項目)
氏名 住所 電話  年齢 確認日
-------------------------------------------
AAA aaa xxxx xx 2003/10/31
DDD bbbb xxxx xx 2003/10/31
FFF ccc xxxx xx 2003/10/31
HHH ddd xxxx xx 2003/1...続きを読む

Aベストアンサー

insert into 住所録DB (氏名,住所,電話,年齢,確認日) values select 氏名,住所,電話,年齢,'2004/02/11' from 住所録DB where 確認日 = '2003/10/31'

で出来ると思うんですが・・・何となくDBの設計に違和感を感じるのは気のせいかな???

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QSQL 複数テーブルのupdate

こんばんは。
複数テーブルの複数カラムをupdateしたいのですが、
うまくいかず困っています。
どなたか助けてください>_<

テーブルA(tableA)のoptionAというカラムと、
テーブルB(tableB)のoptionBというカラムを両方更新したいんです。

やりたい内容のイメージとしてはこんな感じです↓
update tableA a, tableB b
set a.optionA='OK', b.optionB='OK'
where a.student_id=b.student_id and a.name='山田';

どなたかご指導お願いいたします。

Aベストアンサー

where条件に別テーブルの結合を必要とするので、同時に更新したい・・・
ということならば、以下のようなupdate文を2回発行ではだめなんでしょうか?

update tableB b
set b.optionB='OK'
where exists(
select * from tableA a
where a.student_id=b.student_id and a.name='山田'
);

update tableA a
set a.optionA='OK'
where a.name='山田';

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

QSELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか

SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか?
MYSQLサーバのバージョンは5.0.77です。

下記のように「*」を使用して指定テーブルの全カラムを表示する方法がありますが、
SELECT TableName.* FROM TableName

上記の逆で、指定テーブルの指定カラム以外の全カラムを一括指定って可能でしょうか?
例えば下記のような「^」みたいな、又は同等な書き方があれば良いなと思ってまして。
SELECT TableName.^ColumnName1 FROM TableName

ちなみに、下記のように一つ一つ表示したいカラムを指定する方法以外です。
SELECT TableName.ColumnName2 , TableName.ColumnName3 FROM TableName

よろしくお願いします。

Aベストアンサー

ない。
SQL文でそんなことをするより、メソッドとして作ればいいんじゃないですか。
だいたい、それ以外のカラムの数がわからないし、並びも不明だし。

#1に方と同じで
SELECT * from xxxx
なんてのは正気の人間は書きません。
カラムの数も位置も属性もわからないSQL文の結果をどうやって扱うのか。

QSQL、2つのテーブルで条件一致したものだけdeleteする方法は?

オラクルSQLで質問です

やりたいことは、
テーブルAから以下の条件に該当するデータを削除する。
基本的にはテーブルBの内容と比較して、一致したもの。

条件(全ての条件を満たすこと)
 テーブルA.AAA = テーブルB.AAA
 テーブルA.BBB = テーブルB.BBB
 テーブルB.CCC > 0


調べたところ、SQLサーバでは以下のように
from を2つ書いて実現できるようです。
が、今回はオラクルなので文法エラーになります。

delete FROM テーブルA FROM テーブルB
where
テーブルA.AAA = テーブルB.AAA
AND
テーブルA.BBB = テーブルB.BBB
AND
テーブルA.CCC > 0
;
commit;


よろしくお願いします

Aベストアンサー

delete 文の細かい構文はちょっと覚えてませんが
サブクエリ使えばいいんじゃないですか

delete from table_a
where 主キーカラム = (
select table_a.主キーカラム
from table_a, table_b
where
指定の条件
)

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング