2016-10-01 19 views
0

SQL Azureでは、次のSQL文が必要です。複数のテーブルからのSQL挿入と整数リスト

  • Tenants(関連コラム:ID)
  • Users(関連カラム:同上)

ユーザテナントテーブルとは直接リンクを有していないIデータとの2つのテーブルを持っている

IはOptInMail(relavantカラム:TenantIdUserIdOptInType)第3のテーブルを埋めるために必要OptInTypeListレコードの各値に対する各テナントのために、各ユーザのためで。

OptInTypeList = 1, 2, 3, 10, 11, 14 

お勧めはありますか?

答えて

2
insert into OptInMail (TenantId, UserId, OptInType) 
    select 
     t.id, u.id, 1 
    from 
     Tenants as t, Users as u; 

...<put same statements with values 2,3,10,11 as far as there are not so many to write>... 

insert into OptInMail (TenantId, UserId, OptInType) 
    select 
     t.id, u.id, 14 
from 
    Tenants as t , Users as u ; 
+0

[悪い習慣をキックする:使用して古いスタイルなJOIN](のhttp:/ /sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 古いスタイルの*カンマで区切られたテーブルのリスト*スタイルは*適切な* ANSI 'JOIN'構文に置き換えられましたANSI - ** 92 ** SQL標準(** 20年以上前**)とその使用はお勧めしません –

+0

はい、廃止されました。悲しいことに、CROSS JOINは、あなたがそれをどのように書いてもパフォーマンスが悪いです。私はまだ古い学校の方法に戻って私は1つを書く...それは通常デモコード、私はまだ生産にクロス結合をプッシュしていない。 –

+0

この質問は、テーブルを一度作成する方法に関するものです。私は最初に簡単な解決策を出しました。それだけです。私はあなたの両方に同意する。現実の世界では、完璧なソリューションの代わりに、最も迅速なソリューションのための場所があることがあります。 – yvs

1

この試してください:あなたがリストならば

insert into OptInMail (TenantId, UserId, OptInType) 
select distinct t.id, u.id, o.id 
from Tenants t cross join Users u cross join OptInTypeList o 

はテーブルではありません。

insert into OptInMail (TenantId, UserId, OptInType) 
select distinct t.id, u.id, o.id 
from Tenants t cross join Users u cross join 
(
select 1 id union all 
select 2 id union all 
select 3 id union all 
select 10 id union all 
select 11 id union all 
select 14 id 
) o 
2
insert into OptInMail (TenantId, UserId, OptInType) 
select distinct t.id, u.id, o.id 
from Tenants t cross join Users u 
cross join (values (1), (3), (10), (11), (14)) o (id)