2011-11-10 18 views
1

私は挿入する必要がありますが、フィールドのために2つの別々のテーブルから来ています。あなたはなステートメントに何かを見ればSqlの挿入先

insert into @tblfirst (ProgID,ProgDate,Spk,Spkadd) 
    values(

    (select ProgID,ProgDate from Prog where ProgSys = '1100), 
    (select Spkr,SpkrAdd from Spk where SpkrSys = '201X42') 

    ) 

わからない:ここで

が動作するようには思えないクエリです。

+0

これらのクエリの両方が最大で1つの行を返すことが保証されていますか? –

+0

タイプミスがあります:ProgSys = '1100' – Edu

答えて

0
declare @ProgID int 
declare @ProgDate datetime 
declare @Spkr varchar(100) 
declare @SpkrAdd varchar(100) 

select @ProgID = ProgID, @ProgDate = ProgDate 
from Prog 
where ProgSys = '1100' 

select @Spkr = Spkr, @SpkrAdd = SpkrAdd 
from Spk 
where SpkrSys = '201X42' 

insert into @tblfirst (ProgID,ProgDate,Spk,Spkadd) 
values (@ProgID, @ProgDate, @Spkr, @SpkrAdd) 

免責事項:私はデータ型が何であるかを想定していましたが、あなたはそのアイディアを得ました。もう少し直感的ですが、このINSERTには問題はありません。

0

この構文はデータベースに依存するため、以下のクエリは、私が考える最も移植性の高いコードです。重複が発生する可能性があることに注意してください。スキーマの細部を理解することで、より選択的なJOIN節が可能になる場合があります。

試してみてください。

insert into @tblfirst (ProgID, ProgDate, Spk, Spkadd) 
select p.ProgID, p.ProgDate, 
    s.Spk, s.Spkadd 
from Prog p 
inner join Spk s on 1=1 
where p.ProgSys = '1100' 
    and s.SpkrSys = '201X42' 
0

方法について:

insert into @tblfirst (ProgID,ProgDate,Spk,Spkadd) 
values (
    select ProgId,ProgDate, Spkr, SpkrAdd from Prog, Spk 
    where ProgSys = '1100'and 
      SpkrSys = '201X42' 
) 
0

どのように結合を使用してはどうですか?

insert into @tblfirst (ProgID,ProgDate,Spk,Spkadd) 
select ProgID,ProgDate,Spkr,SpkrAdd 
from Prog, Spk 
where Prog.ProgSys = '1100' and SpkrSys = '201X42' 

私は同意しますが、それは仕事をするでしょう。 ProgとSpkの間に関係がある場合は、おそらくwhere句の一部を形成するはずです。