我有这样的表:
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:
- 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)
我想为 to 建立一个左tbl_results
连接tbl_base
:
SELECT
*
FROM
tbl_base
LEFT JOIN tbl_results
ON tbl_results.id = tbl_base_id
...
构造查询以使我加入tbl_results.id
ID 的四种可能排列的最有效方法是什么?我试过了:
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 与四个可能 ID 中的任何一个匹配的任何行。
更新:
这是我追求的输出:
id value
aaaa 10
bbbb NULL
cccc 20
dddd 50 --from 'dddd'
dddd 10 --from 'zzzz'