当前位置:操作系统 > Unix/Linux >>

多对多关系数据表查询

问题如下:

  有主表: 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_stat>0 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';
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,