例如:
table :t_A
id name record
1 a b
2 c d
3 e f table :t_b
id aid count
1 1 bb
2 2 dd
3 1 ff table :t_c
id aid tlevel
1 2 3
2 3 1
3 3 2
问:我想把t_A与t_b表关联的数据和t_b与t_c 关联的数据放在一起查询出来,请问怎么写这条SQL??
table :t_A
id name record
1 a b
2 c d
3 e f table :t_b
id aid count
1 1 bb
2 2 dd
3 1 ff table :t_c
id aid tlevel
1 2 3
2 3 1
3 3 2
问:我想把t_A与t_b表关联的数据和t_b与t_c 关联的数据放在一起查询出来,请问怎么写这条SQL??
table :t_A
id name record
1 a b
2 c d
3 e f table :t_b
id aid count
1 1 bb
2 2 dd
3 1 ff table :t_c
id bid tlevel
1 2 3
2 3 1
3 3 2
问:我想把t_A与t_b表关联的数据和t_b与t_c 关联的数据放在一起查询出来,请问怎么写这条SQL??
select *from t_A,t_b where t_A.id=t_b.aidselect * from t_b,t_c where t_b.id=t_c.bid我意思是怎么能用一条语句完成,
select t_a.id,name,record,count,tlevel from t_a,t_b,t_c where ta.id=t_b.aid and t_a.id=t_c.aid
select a.id,a.name,a.record,b.aid,b.count,c.bid,b.tlevel from t_A as a,t_b as b,t_c as c where ta.id=t_b.aid and t_a.id=t_c.aid
SELECT t_user.uid, unickname, tlevel
FROM t_user, t_guild_member
WHERE t_guild_member.tuid = t_user.uid
AND tgid = '13'
GROUP BY t_user.uid DESC 结果1:
uid unickname tlevel 6546 堕天 6
6516 泪痕 6
6479 洒泪 6
5987 一字邪王 6
5824 孙尖 6
5773 大飞 6
5620 撒旦的 6
5166 铜雀 6
4955 小曼 6
4890 皑皑 6
4803 鬼妹 6
4702 式工 6
4609 法规科个 6
4489 zcl 6
4472 龙也在天 6
4404 紫雨 6
1732 董俷 6
116 浪漫骑士 1
17 家园 6
SELECT t_user.uid, unickname, sum( credit )
FROM t_user, t_donation_record
WHERE t_donation_record.uid = t_user.uid
GROUP BY t_user.uid结果2:uid unickname sum( credit )
9 流浪王 10
17 家园 2
43 铁血々守兰 200
52 邂逅de约定 105
75 铁血々雨点 10
87 逍遥之野 30
116 浪漫骑士 840
121 黑涩哭泣 5
133 ╱ゞ風雲灬炫 9000
136 H2oV 3
157 丶丶放荡大人 20
207 天下村长 10
219 ゞ風雲灬舞 100
231 惊鸿一少 17
249 风云 105
255 唯1的色彩 20
260 小菜 105 但是:
如果我联合查询出来的是:SELECT t_user.uid, unickname,tlevel, sum( credit ) AS credit
FROM t_donation_record, t_user, t_guild_member
WHERE t_donation_record.uid = t_user.uid
AND t_guild_member.tuid = t_user.uid
AND tgid = '$gid'
GROUP BY t_user.uid DESC
结果:
uid unickname tlevel credit
116 浪漫骑士 1 840
17 家园 6 2
我的意思是结果1的加上 credit 没有数值为null;
LEFT JOIN t_b b ON a.id = b.aid LEFT JOIN t_c c ON a.id = c.aid
WHERE c.tlevel IS NOT NULL
FROM t_donation_record a
LEFT JOIN t_user b ON a.uid = b.uid
LEFT JOIN t_guild_member c ON b.uid = c.tuid
WHERE c.tgid = '13'
GROUP BY b.uid DESC 结果:
uid unickname tlevel credit
116 浪漫骑士 1 840
17 家园 6 28楼的,查出来还是两条数据呀???
你是想要sum(credit)为0的数据都显示出来是吗?
把2楼的and换成or
我说明一下吧,我在t_guild_member 表里存储成员信息,无主键,t_user 表非常复杂,主键是uid 还有一个t_donation_record也就是记录user 有没有捐献过功勋。
t_guild_member
tgid tuid tlevel
6 5 1
11 7 6
4 9 6
t_donation_record
id uid gid credit donation_time
1 249 1 105 2009-03-19 20:13:22
2 260 1 105 2009-03-19 20:16:07
3 272 1 105 2009-03-19 20:19:45
4 285 1 105 2009-03-19 20:23:49
我在HTML的表现行式是:把所有成员列出来,如果有捐献过功勋的,显示出来,没有的为0,所以这个SQL就是在查出所以成员的基础上,去查t_donation_record统计一下每个user总共捐了的数值,没有捐也可在HTML显示的,捐的显示出总数。在上面的回帖中我说明了一次,好像没表达好,呵呵,非常感谢!!
楼上的把建表语句和测试数据帖出来,我给你调试一下.
你是想要sum(credit)为0的数据都显示出来是吗? 就是不管 sum(credit)为不为0它都要显示出来 的,
还有,补充一下,有可能在t_donation_record里没有user的记录,但是,只要在t_guild_member的成员都要显示出来的!
另外,你多利用right join 和left join
select *from t_A,t_b where t_A.id=t_b.aid
UNION ALL
select * from t_b,t_c where t_b.id=t_c.bid
SELECT a.uid, a.unickname, b.tlevel, sum( c.credit ) AS credit
FROM t_user a
LEFT JOIN t_guild_member b ON a.uid = b.tuid
LEFT JOIN t_donation_record c ON a.uid = c.uid
WHERE b.tgid = '$gid'
GROUP BY a.uid DESC
谢谢各位了,特别是8楼的!