1

データベース内のほとんどのプロシージャがレガシー結合を使用しているため、レガシー結合構文をANSI結合構文にリファクタリングするときに問題が発生します。これは、通常のレガシー結合ではなく、SQLの「JOIN」構文を使用するように変更する必要があるコードです。誰かがそれをどのように行うことができるか私に提案できますか?

    select 
          a.userkey, 
          a.username,
          c.monthd ,
          b.currencykey 
     from 
         #users a,
         #invoicedata b,
          #revdate c
     where 
         (a.userkey >= b.userkey or a.userkey <= b.userkey) 
          and b.idate between c.startdate and c.enddate
      group by 
           a.userkey,
           a.username,
           c.monthd,
           b.currencykey

       order by c.id,a.username,b.currencykey
4

1 に答える 1

3

この部分(a.userkey >= b.userkey or a.userkey <= b.userkey)は正しくないようで、にないorder by列 (少なくともagregate関数なし) はできませんgroup by

したがって、おそらく次のようなものです。

select 
      a.userkey, 
      a.username,
      c.monthd ,
      b.currencykey 
 from #users a
 inner join #invoicedata b on a.userkey = b.userkey
 inner join #revdate c on b.idate between c.startdate and c.enddate
 group by 
      a.userkey,
      a.username,
      c.monthd,
      b.currencykey

また、ネストされた結合を内部結合に置き換えましたが、それは必要ありませんでした:)


一方、クロス結合が必要な場合があります。

select 
      a.userkey, 
      a.username,
      c.monthd ,
      b.currencykey 
 from #users a
 cross join #invoicedata b
 inner join #revdate c on b.idate between c.startdate and c.enddate
 group by 
      a.userkey,
      a.username,
      c.monthd,
      b.currencykey
于 2012-06-15T09:19:59.557 に答える