sql 怎么把两张表连接起来?

usun82 2009-05-06 12:15:30
表A的记录是 ID Content
001 内容a1
001 内容a2
001 内容a3
表B的记录是 ID Content
001 内容b1
001 内容b2
怎么把他们连接成
ID aContent bContent
001 内容a1 内容b1
001 内容a2 内容b1
001 内容a3 null
注意还有其他的记录,我只是列举了卡号为001的记录,如能解决不胜感激!!

...全文
1007 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZYYong 2009-05-06
  • 打赏
  • 举报
回复
最后再加个Order by IsNull(a.ID,B.ID),A.Content,B.Content就是你想要的结果了
ZYYong 2009-05-06
  • 打赏
  • 举报
回复
不过,修正一下取后的 ID:
select
IsNull(a.id,b.id) as id,
a.Content as aContent,
b.Content as bContent
from
A FULL join B
on
a.id=b.id
ZYYong 2009-05-06
  • 打赏
  • 举报
回复
同意 Josy 的接法
csdyyr 2009-05-06
  • 打赏
  • 举报
回复
DECLARE @TA TABLE([ID] VARCHAR(3), [Content] NVARCHAR(4))
INSERT @TA
SELECT '001', N'内容a1' UNION ALL
SELECT '001', N'内容a2' UNION ALL
SELECT '001', N'内容a3'

DECLARE @TB TABLE([ID] VARCHAR(3), [Content] NVARCHAR(4))
INSERT @TB
SELECT '001', N'内容b1' UNION ALL
SELECT '001', N'内容b2'

SELECT A.ID,A.Content,B.Content
FROM (
SELECT *,SEQ=ROW_NUMBER() OVER (ORDER BY GETDATE()) FROM @TA)A FULL JOIN (
SELECT *,SEQ=ROW_NUMBER() OVER (ORDER BY GETDATE()) FROM @TB) B ON A.SEQ=B.SEQ
/*
ID Content Content
---- ------- -------
001 内容a1 内容b1
001 内容a2 内容b2
001 内容a3 NULL
*/
百年树人 2009-05-06
  • 打赏
  • 举报
回复
如果存在B表比A表多的记录也要显示出来,则用full join
百年树人 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 josy 的回复:]
SQL codeselect
a.id,
a.Content as aContent,
b.Content as bContent
from
A
left join
B
on
a.id=b.id
[/Quote]
修正一下

---测试数据---
if object_id('[A]') is not null drop table [A]
go
create table [A]([ID] varchar(3),[Content] varchar(6))
insert [A]
select '001','内容a1' union all
select '001','内容a2' union all
select '001','内容a3'
if object_id('[B]') is not null drop table [B]
go
create table [B]([ID] varchar(3),[Content] varchar(6))
insert [B]
select '001','内容b1' union all
select '001','内容b2'

---查询---
select
a.id,
a.Content as aContent,
b.Content as bContent
from
(select *,px=(select count(1) as cnt from A t where t.id=a.id and t.content<a.content) from A) as A
left join
(select *,px=(select count(1) as cnt from B t where t.id=b.id and t.content<b.content) from B) as B
on
a.px=b.px


---结果---
id aContent bContent
---- -------- --------
001 内容a1 内容b1
001 内容a2 内容b2
001 内容a3 NULL

(所影响的行数为 3 行)
百年树人 2009-05-06
  • 打赏
  • 举报
回复
select 
a.id,
a.Content as aContent,
b.Content as bContent
from
A
left join
B
on
a.id=b.id

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧