Domanda

Voglio creare prodotto cartesiano sql query.But, sto ottenendo il torto error.Where io?

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
È stato utile?

Soluzione

In SQL Server è possibile scrivere

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

Questa è la migliore sintassi per sottolineare che si tratta di un cross join.

Ma su SQL Server 2008 la query dà lo stesso risultato.

Modifica

Il problema non è l'istruzione SELECT, ma gli inserti. Inserti con clausole di valore multipla è una nuova funzionalità di SQL Server 2008. Per il 2005 si deve scrivere:

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')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top