0

3 つ以上のテーブルからデータを取得するクエリがあります。where句でフィルタ基準を使用していますが、結合キーワードは使用していません

select
    d.proc_code,
    d.dos,
    s.svc_type
from 
    claim_detail d, h_claim_hdr hh, car_svc s 
where 
    d.bu_id="$inp_bu_id" 
and
    hh.bu_id="$inp_bu_id" 
and 
    s.bu_id="$inp_bu_id" 
and 
    d.audit_nbr="$inp_audit_nbr" 
and 
    hh.audit_nbr="$inp_audit_nbr"
and 
    d.audit_nbr=hh.audit_nbr 
and 
    s.car_svc_nbr=hh.aut_nbr 

これを書くより良い方法はありますか?

4

4 に答える 4

4

キーワードを使用していませんがJOIN、クエリはJOIN.

より「現代的な」クエリの書き方 (つまり、ANSI SQL 標準に準拠したもの) は次のようになります。

select
    d.proc_code,
    d.dos,
    s.svc_type
from 
    claim_detail d
join
    h_claim_hdr hh on d.audit_nbr=hh.audit_nbr 
join
    car_svc s on s.car_svc_nbr=hh.aut_nbr
where 
    d.bu_id="$inp_bu_id" 
and
    hh.bu_id="$inp_bu_id" 
and 
    s.bu_id="$inp_bu_id" 
and 
    d.audit_nbr="$inp_audit_nbr" 
and 
    hh.audit_nbr="$inp_audit_nbr"

これは単なる最新の構文であることに注意してください。同じクエリを表現し、パフォーマンスには影響しません。

このクエリの出力に行が表示されるためには、対応する行が 3 つのクエリすべてに存在する必要があることに注意してください (つまり、内部結合です)。claim_detail行がないh_claim_hdr、または存在しない行を返したい場合はcar_svc、代わりに左外部結合を使用してください。

于 2013-11-07T18:39:50.823 に答える
0

JOIN キーワードの代わりに WHERE 句を使用することは、結合を行うための基本的に異なる構文です。JOIN 句の使用は ANSI 構文と呼ばれるTheta構文と呼ばれていると思います。

ANSI 構文はほぼ普遍的に推奨されており、一部のデータベースでは外部 JOIN に ANSI 構文が必要です。

于 2013-11-07T18:47:06.463 に答える
0

節内のコンマは、from本質的に . と同じcross joinです。cross join自分が何をしているのかを本当に理解していない限り、本当にa を使用したくありません。

適切な結合構文には、いくつかの利点があります。最も重要なのは、他のタイプの結合をデータベース間で簡単かつ互換的に表現できることです。

ほとんどの人は、おそらくこのバージョンの方が従い、維持しやすいと思うでしょう:

select d.proc_code, d.dos, s.svc_type
from  claim_detail d join
      h_claim_hdr hh
      on d.bu_id = hh.bu_id and d.audit_nbr = hh.audit_nbr
      car_svc s 
      on d.bu_id = s.bu_id and s.car_svc_nbr = hh.aut_nbr
where d.bu_id = "$inp_bu_id" 
      d.audit_nbr = "$inp_audit_nbr";
于 2013-11-07T18:45:46.700 に答える
-1

使用しない場合JOIN は暗黙の内部結合になります。WHERE句の結合基準を使用した例のように。だから、あなたは私に行方不明の記録を残すことができます. 2 番目のテーブルに対応するレコードがなくても、最初のテーブルのすべてのレコードが必要だとします。現在のコードでは、2 番目のテーブルに一致するレコードがある最初のテーブルのレコードのみが返されます。

ジョイン

于 2013-11-07T18:38:28.030 に答える