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

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
---------------
1 AA A1 BB
2 AAA A2 BB
3 AAAA A3 BB
-----------------
(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