次のようなテーブルがあります。
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 つあります。
- tbl_base.id
- tbl_base.primary_id
- tbl_current.current_id (tbl_current.id = tbl_base.id)
- tbl_current.current_id (tbl_current.id = tbl_base.primary_id)
tbl_results
toの左結合を作成したいtbl_base
:
SELECT
*
FROM
tbl_base
LEFT JOIN tbl_results
ON tbl_results.id = tbl_base_id
...
tbl_results.id
ID の現在の 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_results
IDが4つの可能なIDのいずれかと一致する行を返したいだけです。
アップデート:
これは私が求めている出力です:
id value
aaaa 10
bbbb NULL
cccc 20
dddd 50 --from 'dddd'
dddd 10 --from 'zzzz'