Mysql如何多表关联查询,大侠帮忙看看!

诠释这低调 发布于 2015/09/17 11:28
阅读 334
收藏 0

A表:各资源的评论表


ID A_ID(B1/B2/B3_ID)
...
...
...
...
...

...
...
...

B1表:话题资源表


ID
...
...






B2表:图文资源表


ID
...
...






B3表:活动资源表


ID
...
..






C表:用户与资源关联表

ID C_ID(B1/B2/B3_ID)
USER_ID
....
...
...


...
...


select count(*) FROM A a

-------------执行结果数--------

22

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

select count(*) FROM A a
left join `C` c on a.`A_ID` = c.`C_ID`
left join B1 b1 on a.`A_ID` = b1.ID
left join B2 b2 on a.`A_ID` = b2.ID
left join B3 b3 on a.`A_ID` = b3.ID


-------------执行结果数--------

47

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

         

求大神,怎么做才是正确输出22条数据的?


补充:

要通过主表评论表查询,只有来自各个资源的评论数为22条,但我想通过查询评论并关联B1、B2、B3中表的NAME字段 并且获取C表中B1、B2、B3的用户对应的数据。

B1:话题资源表;B2:图文资源资源表;B3:活动资源表
C:是资源分配所属用户关联表
A:是来自于B1、B2、B3的资源的评论信息数据表

B1、B2、B3 和C的关系是 一个用户可以多个资源,一个资源也可以指定多个用户

B1、B2、B3 和A的关系是 一个评论只针对于一个资源,一个资源可能有多条评论数,评论表有个类型字段判断是属于那种资源类型



加载中
0
Vicent-for-Vendtta
Vicent-for-Vendtta
a与其他表存在一对多的情况 看下47条有没有重复数据
诠释这低调
应该是语句错了 但是试了多种方法 都感觉不行 47条 是有重复的 所以就SQL有问题
诠释这低调
B1:话题资源表;B2:图文资源资源表;B3:活动资源表 C:是资源分配所属用户关联表 A:是来自于B1、B2、B3的资源的评论信息数据表 B1、B2、B3 和C的关系是 一个用户可以多个资源,一个资源也可以指定多个用户 B1、B2、B3 和A的关系是 一个评论只针对于一个资源,一个资源可能有多条评论数,评论表有个类型字段判断是属于那种资源类型
0
张乐1024
张乐1024
--没有理解错的话,你的A和C是一对一关系,或者说是A主表,C从表,而B1-B3也是A的从表,不过B1-B3是合计,那么可以这样试试
SELECT COUNT(1) FROM A 
LEFT JOIN C ON A.A_ID = C.C_ID
LEFT JOIN 
(SELECT B1_ID AS B_ID FROM B1 
UNION ALL 
SELECT B2_ID AS B_ID FROM B2
UNION ALL

SELECT B3_ID AS B_ID FROM B3) B ON A.A_ID = B.B_ID

--楼主可以试试



诠释这低调
回复 @张乐1024 : 是的 先查询A数据 关联B1、B2、B3表的NAME并且查询B1、B2、B3关联的USER_ID 主表是A表
张乐1024
张乐1024
回复 @诠释这低调 : 那就是说,你想查到A表里面对应B1\B2\B3分别有多少记录,并且B1\B2\B3要跟C关联,查询所属用户,是这样理解吗?
诠释这低调
目前需求是,想把A评论表的数据查询并关联B1、B2、B3资源获取对应名称,再获取资源对应的关联用户ID
诠释这低调
我试了 还是不行 B1:话题资源表;B2:图文资源资源表;B3:活动资源表 C:是资源分配所属用户关联表 A:是来自于B1、B2、B3的资源的评论信息数据表 B1、B2、B3 和C的关系是 一个用户可以多个资源,一个资源也可以指定多个用户 B1、B2、B3 和A的关系是 一个评论只针对于一个资源,一个资源可能有多条评论数,评论表有个类型字段判断是属于那种资源类型
0
why-mao
why-mao
大哥,你看看  你的A是资源评论表,你和C表:用户与资源关联表 是什么意思?C应该是资源,用户 关系的,不应该和B类型的关联吗? A 关联 (b1和C关联的表)关联 (b2和C关联的表)关联 (b3和C关联的表)
0
张乐1024
张乐1024
--没有理解错的话,你的A和C是一对一关系,或者说是A主表,C从表,而B1-B3也是A的从表,不过B1-B3是合计,那么可以这样试试
SELECT COUNT(1) FROM A 
LEFT JOIN
(SELECT B1_ID AS B_ID, NAME FROM B1 
LEFT JOIN C ON B1.B1_ID = C.C_ID
UNION ALL
SELECT B2_ID AS B_ID, NAME FROM B2
LEFT JOIN C ON B2.B2_ID = C.C_ID
UNION ALL
SELECT B3_ID AS B_ID, NAME FROM B3
LEFT JOIN C ON B3.B3_ID = C.C_ID
) B ON A.A_ID = B.B_ID

--那你可以用上面的语句试试,我没有测试,不过逻辑大概就是这样的。先用B1\B2\B3各自关联C表,获取到B1\B2\B3里面的NAME字段,然后再用主表A关联B1\B2\B3的结果合集,这样出来的就是你要的结果



返回顶部
顶部