作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
你好(一开始我很抱歉我的英语不好)
我有两个表:tbl1
和tbl2
;两者具有相同的结构,但如果来自不同来源,则其中包含数据集,我不能混合使用它们。
在另一个表 tbl3
中,我有 dataid
和 datasource
。我想做的是从源链接的表中选择数据。
我尝试生成的伪代码:
SELECT
tbl3.dataid,
tbl3.datasource,
SEL_TBL.important_data,
SEL_TBL.another_thing,
SEL_TBL.something_completly_different
FROM
tbl3
LEFT JOIN
( SWITCH tbl3.datasource
CASE 'tbl1':
tbl1 AS >> SEL_TBL
CASE 'tbl2':
tbl2 AS >> SEL_TBL
)
ON
SEL_TBL.dataid = tbl3.dataid
我需要的结果包含:important_data
、another_thing
,当然还有来自“switch statment”中选择的表的something_completly_different
。
现在有效的是:
SELECT
tbl3.dataid,
tbl3.datasource,
(
CASE
WHEN tbl3.datasource ='tbl1'
THEN
tbl1.important_data
ELSE
tbl2.important_data
END
) important_data
FROM
tbl3
LEFT JOIN
tbl2
ON
tbl2.dataid = tbl3.dataid
LEFT JOIN
tbl1
ON
tbl1.dataid = tbl3.dataid
在此查询的结果中,我得到了 dataid
、datasource
和 imporatn_data
。我当然可以为每个字段重复整个案例 block ,但也许有更文明的方法。
哦还有一件事:tbl1.dataid 和 tbl2.dataid 可以获得相同的值(这就是为什么我不能混用表)
最佳答案
最好的解决方案是使用左连接并包含连接要求。
然后 coalesce 为您提供每个字段的结果。
由于这是星型数据模型的标准做法,SQL 优化器将使它运行得非常快。
SELECT
tbl3.dataid,
tbl3.datasource,
COALESCE(tbl1.important_data, tbl2.important_data) important_data
COALESCE(tbl1.another_thing, tbl2.another_thing) another_thing,
COALESCE(tbl1.something_completly_different, tbl2.something_completly_different) something_completly_different
FROM tbl3
LEFT JOIN tbl2 ON tbl2.dataid = tbl3.dataid AND tbl3.datasource = 'tbl2'
LEFT JOIN tbl1 ON tbl1.dataid = tbl3.dataid AND tbl3.datasource = 'tbl1'
关于mysql - 选择要从中选择数据的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35090044/
这个问题在这里已经有了答案: Is a moved-from vector always empty? (4 个答案) 关闭 4 年前。 从 std::vector move 数据后,它的容量是否必
我是一名优秀的程序员,十分优秀!