0

Interbase 用の SQL ステートメントを作成しようとしています。

この SQL の何が問題になっていますか?

md_master (trm) = マスター テーブル cd_Med (cdt) = 詳細テーブル

SELECT trm.seq_no, trm.recipient_id, trm.payee_fullname, trm.payee_address1, trm.payee_address2, trm.payee_address3, trm.payee_address_city, trm.payee_address_state, trm.recip_zip, trm.recip_zip_4, trm.recip_zip_4_2, trm.check_no, trm.check_date, trm.check_amount,
cdt.com_ss_source_sys, cdt.cd_pay_date, cdt.com_set_amount,
bnk.name, bnk.address, bnk.transit_routing,
act.acct_no
FROM md_master trm, cd_med cdt, accounts act, banks bnk
join cd_med on cdt.master_id = trm.id
join accounts on act.acct_id = trm.account_tag
join banks on bnk.bank_id = act.bank_id
ORDER BY cdt.master_id

エラーは発生しません。コンピューターは処理を続けてハングアップします。

4

3 に答える 3

7

特に Interbase については知りませんが、その FROM 句は少し奇妙に思えます (おそらく、私が慣れていない構文に過ぎないのでしょう)。これは役に立ちますか?

...
FROM md_master trm
join cd_med cdt on cdt.master_id = trm.id
join accounts act on act.acct_id = trm.account_tag
join banks bnk on bnk.bank_id = act.bank_id

ところで、WHERE 句がないため、これらのテーブルのいずれかが大きくても、実行に時間がかかることにあまり驚かないでしょう。

于 2011-10-04T13:25:44.460 に答える
1

あなたはアンチパターンに噛まれましたimplicit join syntax

SELECT * FROM table_with_a_1000rows, othertable_with_a_1000rows

出力で 100 万行を選択して、両方のテーブルでクロス結合を実行します。

あなたがやっている:

FROM md_master trm, cd_med cdt, accounts act, banks bnk

4 つのテーブルのクロス結合(後で通常の結合と組み合わせる)で、何十億もの行を簡単に生成できます。
interbase がハングするのも不思議ではありません。宇宙に原子があるよりも多くの行を生成するために、時間の終わりまで機能しています。

FROM
句の後に 使用しないでください,。これは暗黙の結合であり、悪です。
次のように、明示的な結合のみを使用してください。

SELECT 
  trm.seq_no, trm.recipient_id, trm.payee_fullname, trm.payee_address1
  , trm.payee_address2, trm.payee_address3, trm.payee_address_city
  , trm.payee_address_state, trm.recip_zip, trm.recip_zip_4, trm.recip_zip_4_2
  , trm.check_no, trm.check_date, trm.check_amount
  , cdt.com_ss_source_sys, cdt.cd_pay_date, cdt.com_set_amount
  , bnk.name, bnk.address, bnk.transit_routing
  , act.acct_no
FROM md_master trm
join cd_med on cdt.master_id = trm.id
join accounts on act.acct_id = trm.account_tag
join banks on bnk.bank_id = act.bank_id
ORDER BY cdt.master_id
于 2011-10-04T19:36:59.567 に答える
0

エラーはfrom句にあります。where句に関係のないコンマ区切りのテーブルで半分を使用し、結合で半分を使用しています。

結合を使用するだけで、すべて正常に機能するはずです

于 2011-10-04T13:32:08.963 に答える