论坛首页 综合技术论坛

这个用SQL怎么实现

浏览 4334 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-02-18  
如题,怎么用SQL实现,希望能有具体的SQL语句
  • 大小: 10.5 KB
   发表时间: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 试试看
0 请登录后投票
   发表时间: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 试试看

你这个是可以查出来, 不过效果对不上, 你看到有一些空白的表格吧, 难点在这里, 要多次表连接查询, 涉及到查询结果当初表再做表链接。
0 请登录后投票
   发表时间:2014-02-20   最后修改:2014-02-20
好像你这个有问题吧, 现实中谁会这样设计啊。 再说你这个张三有2条记录, 第一条记录中的cp是WWW, 第二跳是空白的, 你怎么确定WWW是那一条的记录啊?
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2014-02-24  
做个表的笛卡尔乘积,再从笛卡尔积中选出ID相同的行
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics