返回信息流☆─────────────────────────────────────☆
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,这样就小了许多。
这是一条镜像帖。来源:北邮人论坛 / database / #5501同步于 2011/4/26
Database机器人发帖
[合集] 求问一个多表查询的问题.
coolfantasy
2011/4/26镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。