Sql 如何有条件地连接到不同的表
我正在尝试处理tableau服务器的数据,并尝试将Sql 如何有条件地连接到不同的表,sql,join,Sql,Join,我正在尝试处理tableau服务器的数据,并尝试将任务表与数据源表和工作簿表连接起来。tasks表中有两个重要字段用于执行此操作: Obj_id和 Obj_类型 如果Obj_type=“Datasource”我会加入datasources.id=tasks.Obj_id。如果Obj_type=“Workbook”,我会加入Workbook.id=tasks.Obj_id 我尝试过类似的方法,但是我无法让它工作,在不检索结果中的空值的情况下,正确的编写方法是什么 select * from d
任务
表与数据源
表和工作簿
表连接起来。tasks
表中有两个重要字段用于执行此操作:
和Obj_id
Obj_类型
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
预期输出示例:基本上,任务字段将始终填充,因为如果数据源驻留在工作簿中,任务表已经从obj_id知道了这一点,并将连接到工作簿id。如果数据源在服务器上单独发布,任务表将连接到数据源表。所以总会有一场比赛
d、 名字
w、 名字
t、 obj_型
其他任务字段
样本数据0
无效的
数据来源
其他任务值
样本数据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';
这是基于你的描述。您的代码还有其他列。您需要添加示例表和预期的输出。我们可以猜出你的意思,但如果你有一个例子,通常会更容易。