导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

求一条sql语句,类似于自连接

yyouyou 2011-05-25 04:17:54
假设有表table1,只有一列为name
table
name
a
b
c
d

现在想通过连接产生一新表,有两列,其数据如下,

name1 name2
a b
a c
a d
b c
b d
c d

请问该如何实现呢,先谢谢了!
...全文
48 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlf1989 2011-05-25
[Quote=引用 4 楼 yyouyou 的回复:]
引用 1 楼 andysun88 的回复:
这生成的表有什么规律吗?看不懂,请说明哈。


就是类似于N个物品中,任取2个的组合,比如是4个物品,取两个组合的数目就是 4*3/2 = 6种。

如果新表中有数据第一列为a,第二列为b,那我就不希望再出现第一列数据为b,第二列数据为a的情况。
[/Quote]
二楼符合你的规律
select a.name as name1,b.name as name2 from tb a, tb b
where a.name<b.name
order by a.name
回复
yyouyou 2011-05-25
[Quote=引用 2 楼 pt1314917 的回复:]
SQL code
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (name varchar(1))
insert into [tb]
select 'a' union all
select 'b' union all
select 'c' union all
sel……
[/Quote]

顶,高手!我怎么就没想到啊,差距啊!我一直就是想用什么方法去判断有了ab,怎么去掉ba。
谢谢了!
回复
yyouyou 2011-05-25
[Quote=引用 1 楼 andysun88 的回复:]
这生成的表有什么规律吗?看不懂,请说明哈。
[/Quote]

就是类似于N个物品中,任取2个的组合,比如是4个物品,取两个组合的数目就是 4*3/2 = 6种。

如果新表中有数据第一列为a,第二列为b,那我就不希望再出现第一列数据为b,第二列数据为a的情况。
回复
水族杰纶 2011-05-25
[Quote=引用 2 楼 pt1314917 的回复:]
SQL code
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (name varchar(1))
insert into [tb]
select 'a' union all
select 'b' union all
select 'c' union all
sel……
[/Quote]
回复
pt1314917 2011-05-25
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (name varchar(1))
insert into [tb]
select 'a' union all
select 'b' union all
select 'c' union all
select 'd'

select * from [tb] a, tb b
where a.name<b.name
order by a.name
回复
andysun88 2011-05-25
这生成的表有什么规律吗?看不懂,请说明哈。
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告