IDとテキストフィールドを含むルックアップテーブルを実装しました。私のテーブルは、異なるフィールド値のLookupIDのみで構成されます。たとえば...同じテーブル(ルックアップテーブル)でmutilple結合(10結合でも可)のためのSQL効率的なソリューション
表
- TABLEID、StatusID、のTypeID、DocIDの
- 1、2、3、4 ようになります
値
ルックアップテーブル
- LookupID、テキスト
値は、この
- 1のようになり、someValueの
- 2、私の状態テキスト
- 3、私のタイプのテキスト
- 4、私の文書テキスト
私は、これは(IDの代わりに表示されたテキストとのデータのSQLビューを作成する)これらのテーブル上のクエリのための最も効率的なソリューション
SELECT T.TableID, L1.Text as StatusText, L2.Text as TypeText, L3.Text as DocText
FROM Table T
LEFT JOIN LookupTable L1 on L1.LookupID = T.StatusID
LEFT JOIN LookupTable L2 on L2.LookupID = T.TypeID
LEFT JOIN LookupTable L3 on L3.LookupID = T.DocID
があるされているかどうかを知る...またはサブクエリを行う必要がありますこのソリューションの方が効果的ですか?このようなもの。
SELECT T.TableID,
(SELECT L.Text FROM LookupTable L WHERE L.LookupID = T.StatusID) as StatusText,
(SELECT L.Text FROM LookupTable L WHERE L.LookupID = T.TypeID) as TypeText,
(SELECT L.Text FROM LookupTable L WHERE L.LookupID = T.DocID) as DocText
FROM Table T
...またはもっと良い解決策がありますか?この例では3回しか参加していないので、10回以上参加する必要があります。
仮説的な状況しか提示していないときに、最良の解決策が何であるかについてコメントするのはかなり難しいです。いずれにしても、単一の「LookupTable」を使用するという考えは、本当に**悪い考えです。 'JOIN'も、あなたが持っているサブクエリのアプローチよりも常に優れています。それを超えるとコメントするのは難しいです。デザインは臭いテストに合格しませんが、それが「テーブル」や「SomeValue」などのときは言いません。 –
入力した2つのクエリのパフォーマンスをテストしましたか?相関サブクエリがより優れたパフォーマンスを発揮するケースがありました。 – trincot
私はMasterXrefテーブルをアプリケーションの中で一回構築しましたが、それはそのシステムの寿命のために残念です。それは、あなたが何度も何度も同じテーブルに何度も何度も何度も何度も質問を重ねてきたときに、うまくやっていくのが凄かったです。私は決してそれをもう一度やりません。 –