浏览 4334 次
锁定老帖子 主题:这个用SQL怎么实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-02-18
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-02-18
SELECT a.id,
a.name, b.bp, c.cp FROM A a RIGHT JOIN B b ON a.id = b.aid FULL JOIN C c ON b.aid = c.aid 试试看 |
|
返回顶楼 | |
发表时间:2014-02-20
竹林闲人 写道 SELECT a.id,
a.name, b.bp, c.cp FROM A a RIGHT JOIN B b ON a.id = b.aid FULL JOIN C c ON b.aid = c.aid 试试看 你这个是可以查出来, 不过效果对不上, 你看到有一些空白的表格吧, 难点在这里, 要多次表连接查询, 涉及到查询结果当初表再做表链接。 |
|
返回顶楼 | |
发表时间:2014-02-20
最后修改:2014-02-20
好像你这个有问题吧, 现实中谁会这样设计啊。 再说你这个张三有2条记录, 第一条记录中的cp是WWW, 第二跳是空白的, 你怎么确定WWW是那一条的记录啊?
|
|
返回顶楼 | |
发表时间:2014-02-20
感觉应该这个需求有问题...
如果硬要用sql实现,以oracle为例: select a.id, a.name, case when b.bp = (lag(b.bp) over(partition by a.id order by b.bp, c.cp)) then null else b.bp end, case when c.cp = (lag(c.cp) over(partition by a.id order by b.bp, c.cp)) then null else c.cp end from a left join b on b.aid = a.id left join c on c.aid = a.id |
|
返回顶楼 | |
发表时间:2014-02-24
做个表的笛卡尔乘积,再从笛卡尔积中选出ID相同的行
|
|
返回顶楼 | |
发表时间:2014-02-25
SELECT a.id, a.name, CASE WHEN b.r >= c.r THEN b.bp ELSE '' END bp, CASE WHEN c.r >= b.r THEN c.cp ELSE '' END cp FROM test.a a, (SELECT b.aid, b.bp, rank() over(PARTITION BY b.aid ORDER BY ROWNUM) r FROM test.b b) b, (SELECT c.aid, c.cp, rank() over(PARTITION BY c.aid ORDER BY ROWNUM) r FROM test.c c) c WHERE a.id = c.aid AND a.id = b.aid |
|
返回顶楼 | |