Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何有条件地连接到不同的表_Sql_Join - Fatal编程技术网

Sql 如何有条件地连接到不同的表

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

我正在尝试处理tableau服务器的数据,并尝试将
任务
表与
数据源
表和
工作簿
表连接起来。
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';

这是基于你的描述。您的代码还有其他列。

您需要添加示例表和预期的输出。我们可以猜出你的意思,但如果你有一个例子,通常会更容易。