我有两个基本实体,录音和工作,我有一个包含recordingid,workid的表recording_work_tmp,它只有一行用于特定的录音ID。然后在l_work_work中可能还有另外一项与这项工作相关的工作,然后可能还有另外一项与下一项工作相关的工作,最后是六层。
我想在recording_work_tmp中为每条记录单行显示每个级别的作品(如果有的话)。现在我可以添加distinct on(recordingid)
以确保我们在recording_work_tmp中每行不会有多个记录,这不是问题。
问题是只想在链接类型是281的情况下显示其他级别的工作但是如果我将连接更改为LINK表是内部连接那么它将不会返回任何没有每个表的有效链接。
如果我有LEFT JOIN那么它显示的值不应该。在 9165022 , 12457013 的SQL结果中, 12803999 应为空,因为它们没有正确的链接类型
如果l_work_work
表具有link_type
值,那么我只能left join
这个值,并在此连接中包含链接类型,并且错误的link_type记录将被过滤掉点。但是因为它只在LINK表中,所以当加入l_work_work表时,我无法阻止错误记录的过滤。
如何编写SQL以返回我需要的内容?
SELECT
t1.recording_id,
t1.work1_id,
t4.entity0,
t5.link_type,
t6.entity0,
t7.link_type,
t8.entity0,
t9.link_type,
t10.entity0,
t11.link_type,
t12.entity0,
t13.link_type,
t14.entity0,
t15.link_type,
t16.entity0
FROM recording_work_tmp t1
LEFT JOIN l_work_work t4
ON t1.work1_id=t4.entity1
LEFT JOIN link t5
ON t4.link=t5.id
and t5.link_type=281
LEFT JOIN l_work_work t6
ON t4.entity0=t6.entity1
LEFT JOIN link t7
ON t6.link=t7.id
AND t7.link_type=281
LEFT JOIN l_work_work t8
ON t6.entity0=t8.entity1
LEFT JOIN link t9
ON t8.link=t9.id
AND t9.link_type=281
LEFT JOIN l_work_work t10
ON t8.entity0=t10.entity1
LEFT JOIN link t11
ON t10.link=t11.id
AND t11.link_type=281
LEFT JOIN l_work_work t12
ON t10.entity0=t12.entity1
LEFT JOIN link t13
ON t12.link=t13.id
AND t13.link_type=281
LEFT JOIN l_work_work t14
ON t12.entity0=t14.entity1
LEFT JOIN link t15
ON t14.link=t15.id
AND t15.link_type=281
LEFT JOIN l_work_work t16
ON t15.link_type=281
LEFT JOIN link t17
ON t16.link=t17.id
AND t17.link_type=281
WHERE (t5.link_type=281 OR t5.link_type is null)
AND (t7.link_type=281 OR t7.link_type is null)
AND (t9.link_type=281 OR t9.link_type is null)
AND (t11.link_type=281 OR t11.link_type is null)
AND (t13.link_type=281 OR t13.link_type is null)
AND (t15.link_type=281 OR t15.link_type is null)
AND (t17.link_type=281 OR t17.link_type is null)
;
返回:
recording_id | work1_id | entity0 | link_type | entity0 | link_type | entity0 | link_type | entity0 | link_type | entity0 | link_type | entity0 | link_type | entity0
--------------+----------+---------+-----------+----------+-----------+----------+-----------+---------+-----------+---------+-----------+---------+-----------+---------
5710625 | 7472941 | 9492475 | 281 | 9165022 | | 12457013 | 281 | | | | | | |
5710625 | 7472941 | 9492475 | 281 | 12803999 | | | | | | | | | |