5

y と比較した x に関して。

  • x は SQL 標準に準拠していますか? 【主観でしたらすみません】
  • x は y よりも効率的ですか?
  • それとも、これらのスクリプトは完全に異なり、異なるコンテキストで使用されますか?

バツ

    SELECT * 
    FROM   a 
           INNER JOIN b ON
           COALESCE(b.columntojoin, b.alternatecolumn) = a.columntojoin

y

    SELECT * 
    FROM   a 
           INNER JOIN b ON
           (case when b.columntojoin is null then b.alternatecolumn else b.columntojoin end) = a.columntojoin
4

2 に答える 2

7

COALESCEは、本質的に簡略化されたCASEステートメントです。

どちらもまったく同じです。

SQL Server (他の DBMS では異なります) にもありISNULLますが、これは実際には非標準の機能であり、実際にはそれよりも制限されていCOALESCEます。

于 2013-03-20T12:05:56.510 に答える
2

この場合、ステメントではなくCOALESCE( よりも多くのレベルを提供する) を使用します。ISNULLCASE

とにかく sだけをチェックしているので、ステートメントはここCASEでは少しかさばっているように見えます。NULL

于 2013-03-20T12:06:53.113 に答える