日期:2014-05-16  浏览次数:20748 次

A/B表为1对多关系,要求联合查询B表只提取一条与A记录关联的记录
A表字段有: aid int, name varchar(20)
B表字段有: bid int, name_id int, ports varchar(20)
B的name_id为外键关联到A表的aid,所以A/B表形成了一对多的关系。

想查询的结果集包括A表中的记录,同时在B表中提取第一条跟A表记录关联的记录。这个语句该怎么写?谢谢1
如:
A表 aid name
  1 KLK
  2 KSS
  3 LKI
  ……
  N ADD
B表 bid name_id ports
  1 1 9089
  2 1 8089
  3 1 7089
  4 2 6077
  5 2 7077
  6 3 8900
  ……
查询结果要求为:
  aid bid ports
  1 1 9089
  2 4 6077
  3 6 8900
谢谢!

------解决方案--------------------
select A.aid,C.bid,B.ports
from A,(
select *
from B B1
where not exists (select 1 from B B2 where B1.name_id=B2.name_id and B1.id < B2.id)
)C
where A.name = C.name_id
------解决方案--------------------
SELECT * FROM A INNER JOIN (
SELECT * FROM B A WHERE NOT EXISTS(SELECT 1 FROM B WHERE A.name_id=name_id and Aid>id)) C
ON A.aid=C.name_id
------解决方案--------------------
SQL code
select *
from a ,b
whree a.aid=b.name_id
group by a.aid