多对多关系数据表查询

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

问题如下:

有主表: tb_client结构如下:

client_id, client_name ......

1 , A公司

2 , B公司

27 , C公司

从表: tb_contact结构如下:

contact_id,client_id, contact_name ......

1, 1 , 张三

2, 2 , 李四

3, 27 , 王五

3, 20 , 李六

和关联表: tb_link 关联表结构如下

link_id, client_id, contact_id, deleted

1, 27, 1, 0

2, 27, 2, 0

2, 28, 10, 0

2, 28, 11, 0

说明部分一:

-----------------------

主表tb_client 与从表tb_contact是一对多的关系,即在从表中查询语句:

SELECT * FROM tb_contact WHERE client_id='27'

可以得到多条记录

说明部分二:

--------------------------

主表tb_client和从表tb_contact之关的部分关联数据通过关联表tb_link建立联系:

通过下面语句可以根据主表tb_client的主键查到从表中的相关记录:

SELECT t1.* FROM tb_contact AS t1, tb_link AS t2 WHERE t1.contact_id = t2.contact_id AND t2.client_id='27'

问题: 我现在需要用一条语句查出从表中与主表主键关联的记录, 同时要通过关联表中关联数据查出从表中相关的记录, 该怎么写. 我只想用一条语句,哪位高手指点一下!

即通过一条SQL语句查询出tb_contact中client_id为27的记录和通过关联表tb_link查询出的tb_contact中的第1条和第2条记录(它们在关联表tb_link中对应的client_id都为27)

我的方法: 两条语句,用UNION合并数据集.

( SELECT * FROM tb_contact_manage WHERE client_id='5' && this_stat0 ORDER BY contact_id DESC ) UNION ( SELECT t1.* FROM tb_contact_manage AS t1, tb_client_contact_link AS t2 WHERE t1.contact_id = t2.contact_id AND t2.client_id='5' ) LIMIT 0,8

秋水兄的方法: 用子查询

select contact_id from tb_client inner tb_client on (tb_link.client_id_id=tb_client.client_id) where tb_clent.client_id='5';

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航