【问题标题】:SQL Full Outer Join - Eliminate replicated column dataSQL Full Outer Join - 消除复制的列数据
【发布时间】:2016-02-22 16:58:18
【问题描述】:

我想知道是否有人可以帮助修改我创建的 SQL 查询,以根据日期的选择参数查询数据。我面临的问题是,由于同一合同号的拟合表中有多个结果,我在结果集中显示重复的合同号。是否可以仅将结果过滤到一个联系人号码?

这是我的查询:

select co.contractdate condate, ff.date_ fitdate, co.contractno conno, cu.surname Surname 
from contract co 
  full outer join co_fitt ff on co.contractno = ff.contractno 
  full outer join customer cu on co.custref = cu.custref 
WHERE co.contractdate between '01/jan/2016' and '31/jan/2016' 
order by co.contractno

【问题讨论】:

    标签: sql join outer-join


    【解决方案1】:

    试试这个

    SELECT co.contractdate condate,
           ff.date_        fitdate,
           co.contractno   conno,
           cu.surname      Surname
    FROM   contract co
           FULL OUTER JOIN (SELECT DISTINCT contractno
                            FROM   co_fitt) ff
                        ON co.contractno = ff.contractno
                           AND co.contractdate BETWEEN '01/jan/2016' AND '31/jan/2016'
           FULL OUTER JOIN customer cu
                        ON co.custref = cu.custref
    ORDER  BY co.contractno 
    

    代替

    co.contractno as conno
    

    使用

    COALESCE(co.contractno,ff.contractno) as conno
    

    会更有意义

    还将contractdate 过滤器移至ON 条件,否则FULL OUTER JOIN 将隐式转换为INNER JOINcontract 表中不匹配的记录将在 contractdate 列中具有 NULL 值,当您在 Where 子句中过滤 contractdate 时,这些值将被过滤

    【讨论】:

      猜你喜欢
      • 2013-03-10
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2012-02-13
      • 1970-01-01
      相关资源
      最近更新 更多