BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #5501同步于 2011/4/26
Database机器人发帖

[合集] 求问一个多表查询的问题.

coolfantasy
2011/4/26镜像同步0 回复
☆─────────────────────────────────────☆ alicexl (辛德瑞拉||【摸球教】教主顾问兼宣传大使) 于 (Sun Apr 24 12:24:14 2011) 提到: 有三张表. T1 是 流程表 有 主键 流程id t1. T2 是 邀请表 有 主键 邀请id t2 和 用户 id t3. T3 是 报名表 有 主键 报名id t4 和 用户 id t3. 邀请的用户不一定报名 报名的用户不一定被邀请 假设 有2个流程 1,2 . 用户 一,二 流程1邀请 一和二参加 其中 一报名 流程2邀请 一参加 其中 二报名 那么结果就是 流程 邀请 报名 1---------一------------一 1---------二------------二 2---------一------------null 2---------null-----------二 求问sql语句怎么写.... 我的语句是这么写的: SELECT dbo.T1.t1, dbo.T2.t2, dbo.T2.t3, dbo.T3.t4 FROM dbo.T1 FULL OUTER JOIN dbo.T2 ON dbo.T1.t1 = dbo.T2.t1 FULL OUTER JOIN dbo.T3 ON dbo.T1.t1 = dbo.T3.t1 AND dbo.T2.t3 = dbo.T3.t3 结果是 1---------一------------一 1---------二------------二 2---------一------------null null------null-----------二 求问如何能得到分析中想要的正确结果~~ ☆─────────────────────────────────────☆ alicexl (辛德瑞拉||【摸球教】教主顾问兼宣传大使) 于 (Sun Apr 24 14:28:28 2011) 提到: 找到原因了。 我们自己思维的时候默认是把用户的全集考虑进去了的。 所以应该先把流程表T1和用户表T4做一个CROSS JOIN 然后再LEFT JOIN邀请表和报名表. ☆─────────────────────────────────────☆ alicexl (辛德瑞拉||【摸球教】教主顾问兼宣传大使) 于 (Sun Apr 24 14:51:45 2011) 提到: 如果不想和所有用户表做关联。毕竟cross join很大。 可以使用 SELECT dbo.T1.t1, T2_1.t3, T3_1.t4 FROM dbo.T1 CROSS JOIN (SELECT DISTINCT dbo.T2.t3 FROM dbo.T2 CROSS JOIN dbo.T3) AS temp LEFT OUTER JOIN dbo.T2 AS T2_1 ON dbo.T1.t1 = T2_1.t1 AND temp.t3 = T2_1.t3 LEFT OUTER JOIN dbo.T3 AS T3_1 ON dbo.T1.t1 = T3_1.t1 AND temp.t3 = T3_1.t3 就好了 ☆─────────────────────────────────────☆ alicexl (辛德瑞拉||【摸球教】教主顾问兼宣传大使) 于 (Sun Apr 24 14:53:44 2011) 提到: 只用了T2和T3中的t3做cross join,这样就小了许多。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。