0

次のようなテーブルがあります。

tbl_base
id      primary_id
aaaa     
bbbb
cccc 
dddd     eeee

tbl_current
id      current_id
aaaa    
bbbb    qqqq
cccc
dddd    zzzz

tbl_results
id     value
aaaa    10
cccc    20
dddd    50
zzzz    10
eeee     5

tbl_results特定の ID に一致する結果の表 ( ) があります。このデータを に結合したいtbl_base。残念ながら、tbl_results に表示される可能性のある ID は 4 つあります。

  1. tbl_base.id
  2. tbl_base.primary_id
  3. tbl_current.current_id (tbl_current.id = tbl_base.id)
  4. tbl_current.current_id (tbl_current.id = tbl_base.primary_id)

tbl_resultstoの左結合を作成したいtbl_base:

SELECT
  *
FROM
  tbl_base
LEFT JOIN tbl_results
  ON tbl_results.id = tbl_base_id
...

tbl_results.idID の現在の 4 つの可能な順列に結合するようにクエリを作成する最も効率的な方法は何ですか? 私は試した:

SELECT 
  *
FROM
  tbl_base
LEFT JOIN tbl_current
  ON tbl_current.id = tbl_base.id
LEFT JOIN tbl_results
  ON (tbl_results.id = tbl_base.id OR 
      tbl_results.id = tbl_base.primary_id OR
      tbl_results.id = tbl_current.id OR
      tbl_results.id = tbl_current.current_id)

これはうまくいきません。問題は、これらのテーブルが実際には大きく、何百万ものレコードがあり、すべての ID 間の接続が考えられることです。テーブルの構造を変更することはできません。与えられたシステムで作業しているだけです。これを最大の効率で行う方法について何か考えはありますか? tbl_resultsIDが4つの可能なIDのいずれかと一致する行を返したいだけです。

アップデート:

これは私が求めている出力です:

id     value
aaaa     10
bbbb     NULL
cccc     20
dddd     50 --from 'dddd'
dddd     10 --from 'zzzz'
4

1 に答える 1

0

目的の出力を投稿したので、次のようにします。

select distinct tbl_both.id, tbl_results.value from
(
  select id, primary_id as secondary_id from tbl_base
  union all
  select id, current_id as secondary_id from tbl_current
) tbl_both
left outer join tbl_results on tbl_results.id in (tbl_both.id, tbl_both.secondary_id);

私はこれをテストしていません。それがうまくいくことを願っています。

于 2013-10-17T20:16:53.333 に答える