[英]SQL comparison condition column to choose the table to JOIN
一般表:
| id | name | type_id |
SECONDARY1表:
| id | general_id | erynda_kakayato | byaka |
SECONDARY2表:
| id | general_id | konkretnaya_hren |
如何使用GENERAL.TYPE_ID的列值将GENERAL表和SECONDARY之一合并? 以下查询不起作用,但是逻辑应该是这样的。
SELECT *
FROM GENERAL
JOIN (CASE WHEN types_id = 1 THEN 'SECONDARY1'
WHEN types_id = 2 THEN 'SECONDARY2' END) AS t
ON GENERAL.id = t.id
此请求是必需的,因为联接的类型更改表的值。 不能使用同一表,因为不同表中的属性和列数取决于列类型GENERAL。
尝试这个:
SELECT g.*
FROM GENERAL AS g
LEFT JOIN SECONDARY1 AS s1
ON CASE WHEN g.type_id = 1 THEN g.id END = s1.general_id
LEFT JOIN SECONDARY2 AS s2
ON CASE WHEN g.type_id = 2 THEN g.id END = s2.general_id
如果type_id = 1
则仅本质上仅执行第一个LEFT JOIN
操作,因为第二个LEFT JOIN
的ON
子句变为NULL = s2.general_id
,该值永远无法评估为true
。
您需要选择在价值select
。 如果使用left join
,则可以选择第一个非NULL
值:
select g.*, coalesce(s1.erynda_kakayato, konkretnaya_hren)
from general g left join
secondary1 s1
on s1.general_id = g.id and g.type_id = 1 left join
secondary s2
on s2.general_id = g.id and g.type_id = 2 ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.