![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
副問合せをいれたINSERT文で、問合せ結果が無い場合
環境はSQL Server2005です。
テーブルA,テーブルBが存在し、テーブルAにレコード追加する際に一部をテーブルBから抽出して、
INSERTしようとしています。
[SQL文]
INSERT INTO テーブルA(フィールド1, フィールド2, フィールド3,フィールド4・・・)
SELECT 'AAA', 'BBB' ,B.フィールド3, B.フィールド4 ・・・
FROM テーブルB B WHERE ~
この場合、テーブルBにWHEREで指定した条件のレコードが存在しない場合はINSERTされなくなってしまいます。
存在しない場合は、該当のフィールドにはNULLをいれたいのですが、テーブルBからの結果が存在しない場合でも
テーブルAにINSERTする方法はありますか?
No.4ベストアンサー
- 回答日時:
今回のやつは、
固定値をAとして、インラインテーブルを作るといういみなので、
そこにテーブルBの列を書いたらエラーになりますね。
なら、
select A.*,B.COLC COLC, B.COLD COLD, =======>>★
from
(
select 'AAA' COLA, 'BBB' COLB
) A
left join TABLEB B on B.コード・・・・
では?
「どのテーブルとどのテーブルを外部結合したいか」
をイメージするといいかと思います。
ご回答ありがとうございます。
ご指摘のあった箇所をまとめて最終的に以下のようにすることで
解決いたしました。
-----------------------
INSERT INTO (colA,colB,colC,colD)
select A.*,B._colC,B.colD
from
(
select 'AAA' _colA, 'BBB' _colB
) A
left join TABLEB B on B.コード
-----------------------
わかりやすい回答でとても助かりました。
有難うございました。
No.3
- 回答日時:
固定値の(仮想)レコードを作ってouter join すればいいということ?
SQLServerだと、Select句にfromは必須じゃないので。
select * from
(
select 'AAA' COLA, 'BBB' COLB ---列別名指定は必須
) A
left join
TABLEB B
on B.コード=8 --<ここにWhere句を書く
というかんじでどうでしょう?
ご回答ありがとうございます。
select * from
(
select 'AAA' COLA, 'BBB' COLB,
B.COLC COLC, B.COLD COLD, =======>>★
) A
left join TABLEB B on B.コード・・・・
というように書いてみましたが、どうしても★の箇所で
「 B.COLCをバインドできませんでした。」というエラーになってしまいます。
外部結合をもう少し調べてみます。有難うございました。
No.2
- 回答日時:
ダミーが不可能であれば、SQL文を複雑化するしかないです。
例えば、
If (SELECT COUNT(*) from Table2 WHERE 年月日2='2007/08/09')>0 INSERT INTO TABLE1 (ID, 年月日1, 年月日2) SELECT * from Table2 WHERE 年月日2='2007/08/09' ELSE INSERT INTO TABLE1 (ID, 年月日1, 年月日2) Values ('', '', '');
これで、ヒット場合としなかった場合とで異なる値をINSERTします。
SQL SERVER 2000 でこのSQL文を実行し結果を確認していますので多分いけるでしょう。
No.1
- 回答日時:
Q、テーブルAにINSERTする方法はありますか?
A、工夫すれば可能ですが・・・。
<Table2>
ID____年月日1____年月日2
1_____20070707___2007/07/07
2_____20070707___2007/08/08
3_____20070708___2007/08/10
9999________null_______________null
例えば、[年月日2]を条件節にして一致していれば当該レコードのデータを返す。
仮に、一致していなければ Null を戻させてみます。
最も、単純な仕掛けはダミーレコードを用意すること。
SELECT TOP 1 年月日1,年月日2 from Table2 WHERE 年月日2='2007/08/08' OR ID=9999 ORDER BY 年月日2 DESC;
|年月日1 |年月日2 |
---|--------------------
1|20070707|2007/08/08|
SELECT TOP 1 年月日1,年月日2 from Table2 WHERE 年月日2='2007/08/09' OR ID=9999 ORDER BY 年月日2 DESC;
|年月日1|年月日2|
---|----------------
1| | |
SELECT 年月日1,年月日2 from Table2 WHERE 年月日2='2007/08/08' OR ID=9999 ORDER BY 年月日2;
|年月日1 |年月日2 |
---|--------------------
1| | |
2|20070707|2007/08/08|
こういう事ですから DESC は必要です。
Top区とダミーの空レコードを利用すれば可能だと思います。
しかし、生成されるのは単なるゴミレコード。
何か意味がありますか?
ご回答ありがとうございます。
確認してみましたが、テーブルBから抽出するレコードの件数は、必ず1もしくは0になります。
なので、ダミーでレコードを入れておくことは不可能でした。
焦って投稿したため、情報が少なくて申し訳ありません。
SELECT TOP 1~ という書き方を知らなかったので、勉強になりました。
有難うございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSで400以上のフィールドが...
-
【Access】フォームで自動計算...
-
Access 昇順・降順で並び替え...
-
ACCESS2000「定義されているフ...
-
ACCESS レーダーチャートのデー...
-
アクセス メモ型 255文字...
-
アクセスで複数行の一括入力す...
-
Accessでテーブルの値をテキス...
-
アクセスでの検索件数の表示
-
副問合せをいれたINSERT文で、...
-
ファイルメーカーで1レコード内...
-
フィールド数の多すぎる・フィ...
-
アクセス エラーを数値「0」に...
-
ACCESSの既存テーブルに、EXCEL...
-
モジュールの値を一気に書き換...
-
Access VBA 抽出したレコード...
-
ACCESSで和暦を西暦に・・・
-
INSERT INTO ステートメントに...
-
Accessで連続データってできま...
-
必須入力項目と入力必須項目
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
Accessのフィールド数が255しか...
-
ACCESSでの改行コード
-
INSERT INTO ステートメントに...
-
ACCESSで400以上のフィールドが...
-
Access 昇順・降順で並び替え...
-
SQLServer2005のSQL文での別名...
-
【Access】フォームで自動計算...
-
ACCESSで和暦を西暦に・・・
-
accessで重複を防ぎたい
-
アクセス エラーを数値「0」に...
-
accessのレポートで元になるテ...
-
ExcelのデータをコピーでACCESS...
-
主キーはオートナンバー型のID...
-
アクセス VBAで列の入れ替...
-
Accessで、固定アルファベット+...
-
Access:リンクテーブルマネー...
-
ACCESS検索★ある文字を複数のフ...
-
アクセスのテーブルデータをCSV...
-
ACCESSでテーブルのチェックを...
おすすめ情報