複数の値節を備えたデカルト製品SQL / INSERTS
-
16-10-2019 - |
質問
Cartesian Product SQL Queryを作成したいのですが、エラーが発生しています。どこで間違っていますか?
alter table #Personel
(
Ad varchar(100)
)
alter table #Masa
(
MasaAdi varchar(100)
)
insert into #Personel values('deneme1'),('deneme2'),('deneme3')
insert into #Masa values('Masa1'),('masa2'),('masa3')
select Ad,MasaAdi from
(
select ROW_NUMBER() over(partition by MasaAdi order by ID,Ad ) as Sira
,ID,Ad,MasaAdi
from (
select newid() as ID,Ad,MasaAdi from #Personel
left outer join #Masa on 1=1
) t
) t2 where Sira = 1 order by Ad
解決
SQL Serverで書き込むことができます
select Ad,MasaAdi from
(
select ROW_NUMBER() over(partition by MasaAdi order by ID,Ad ) as Sira,ID,Ad,MasaAdi
from (
select newid() as ID,Ad,MasaAdi
from #Personel
cross join #Masa
)t
) t2 where Sira = 1 order by Ad
これは、クロス結合であることを強調するのに最適な構文です。
ただし、SQL Server 2008では、クエリが同じ結果をもたらします。
編集:
あなたの問題は選択されたステートメントではなく、挿入物です。複数の値節を備えた挿入は、SQL Server 2008の新機能です。2005年には、次のことを記述する必要があります。
insert into #Personel values('deneme1')
insert into #Personel values('deneme2')
insert into #Personel values('deneme3')
insert into #Masa values('Masa1')
insert into #Masa values('masa2')
insert into #Masa values('masa3')
所属していません dba.stackexchange