首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL连接两个表解决方法

2012-01-15 
SQL连接两个表有两个表A和B.表A字段id名称产品1AAA12AAAA23AAAAA3表B字段id名称产品1BBA12BBBA23BBBBA3现

SQL连接两个表
有两个表A和B.
表A字段
id         名称           产品
1           AA               A1
2           AAA             A2
3           AAAA           A3

表B字段
id         名称           产品
1           BB               A1
2           BBB             A2
3           BBBB           A3

现在读取出A表的第一个记录:
名称     对应     产品
AA     ----   A1

现在要的效果是由A表的A1,对应于B表的产品A1,然后读取出B表的名称BB。

就是两个表中关联的问题,请问sql语句该如何写?

[解决办法]
create table A(id int, 名称 varchar(20), 产品 varchar(20))
go
create table B(id int, 名称 varchar(20), 产品 varchar(20))
go
--
insert into A select 1, 'AA ', 'A1 '
union select 2, 'AAA ', 'A2 '
union select 3, 'AAAA ', 'A3 '
go
insert into B select 1, 'BB ', 'A1 '
union select 2, 'BBB ', 'A2 '
union select 3, 'BBBB ', 'A3 '
--
select *,(select top 1 B.名称 from b where b.产品=产品) 名称b from A

drop table A
drop table B
------------------
id 名称 产品 名称b
---------------
1AAA1BB
2AAAA2BB
3AAAAA3BB
-----------------
(3 行受影响)
[解决办法]
select top 1 A.名称,B.名称 from A,B where A.产品 = B.产品 order by A.id

如果B表中没有相应的记录,A表中的名称也要表示的话:
select top 1 A.名称, B.名称 from A, B where A.产品 *= B.产品 order by A.id

[解决办法]
SELECT A.名称,C.名称
FROM A LEFT OUTER JOIN
(SELECT MIN(名称) 名称,产品 FROM B GROUP BY 产品 ) C ON A.产品= C.产品
ORDER BY A.ID DESC

这样应该可以,如果名称和产品一一对应,还能

SELECT A.名称,C.名称
FROM A LEFT OUTER JOIN
(SELECT DISTINCT 名称,产品 FROM B ) C ON A.产品= C.产品
ORDER BY A.ID DESC

热点排行