[英]How to Join Conditionally to Different Tables
我正在尝试使用 tableau server 的数据,并且正在尝试将tasks
表与datasources
表和workbooks
表连接起来。 tasks
表有两个重要字段:
Obj_id
和Obj_type
。 如果Obj_type = "Datasource"
我会加入datasources.id = tasks.obj_id
。 如果Obj_type = "Workbook"
,我会加入workbook.id = tasks.obj_id
。
我尝试了这样的事情,但我无法让它工作,在我的结果中没有检索空值的情况下编写这个的正确方法是什么。
select * from datasources d
left join workbooks w on d.parent_workbook_id = w.id
left join tasks t on (if t.obj_type = "Datasource" then d.id else w.id end) = t.obj_id
示例预期 output:基本上,任务字段将始终被填充,因为如果数据源驻留在工作簿中,则任务表已经知道来自 obj_id 并将加入到工作簿 ID。 如果数据源在服务器上单独发布,则任务表将连接到数据源表。 所以总会有一场比赛。
d.姓名 | w.姓名 | t.obj_type | 其他任务领域 |
---|---|---|---|
样本数据0 | Null | 数据源 | 其他任务值 |
样本数据1 | wkbk1 | 工作簿 | 其他任务值 |
我想你想要这样的东西:
select *
from tasks t left join
datasources d
on t.obj_id = d.id and
t.obj_type = 'Datasource' left join
workbooks w
on t.obj_id = w.id and
t.obj_type = 'Workbook';
这是根据你的描述。 您的代码还有其他列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.