日期:2014-05-18  浏览次数:20453 次

一个交叉查询问题
==table A============
ID
---------------
1
2
3
====================
==table B===========
ID
------------------
a
b
c
====================

想得到的结果
=============
1,a
1,b
1,c
2,a
2,b
2,c
3,a
3,b
3,c
=========================
有什么好办法没有?


------解决方案--------------------
select 
a.id,
b.id
from a,b
order by a.ID asc,b.ID asc

select 
a.id,
b.id
from a cross join b
order by a.ID asc,b.ID asc
------解决方案--------------------
select a.id, b.id
from a, b
order by a.id, b.id
------解决方案--------------------
同意楼上观点,用不加条件的连接再加上order排序输出即可
------解决方案--------------------
SQL code

create table A(id varchar(10))
insert into A values('1') 
insert into A values('2')
insert into A values('3') 
create table B(id varchar(10))
insert into B values('a') 
insert into B values('b') 
insert into B values('c') 
go

select a.id + ',' + b.id 'col' from a cross join b order by col

drop table A,B

/*
col                   
--------------------- 
1,a
1,b
1,c
2,a
2,b
2,c
3,a
3,b
3,c

(所影响的行数为 9 行)
*/

------解决方案--------------------
SQL code
--如果A的ID为INT型,转化一下.
create table A(id int)
insert into A values(1) 
insert into A values(2)
insert into A values(3) 
create table B(id varchar(10))
insert into B values('a') 
insert into B values('b') 
insert into B values('c') 
go

select cast(a.id as varchar) + ',' + b.id 'col' from a cross join b order by col

drop table A,B

/*
col                   
--------------------- 
1,a
1,b
1,c
2,a
2,b
2,c
3,a
3,b
3,c

(所影响的行数为 9 行)
*/

------解决方案--------------------
cross join
没错 同意
------解决方案--------------------
想得到的结果是:
tableA “乘以” tableB
即笛卡积,是Codd对于关系数据库给出的8个关系操作之一。

SQL实现:cross join

SQL code
select * from tableA cross join tableB

------解决方案--------------------
select A.id,B.ID from Table A full join TableB B on 1=1