一般表:
| id | name | type_id |
SECONDARY1 表格:
| id | general_id | erynda_kakayato | byaka |
SECONDARY2 表:
| id | general_id | konkretnaya_hren |
如何使用列的值将GENERAL表和其中一个SECONDARY组合到GENERAL.TYPE_ID? 以下查询不起作用,但逻辑应该是这样的。
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。
答案 0 :(得分:1)
试试这个:
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
操作,因为第二个ON
的{{1}}子句变为LEFT JOIN
,可以永远不会评估为NULL = s2.general_id
。
答案 1 :(得分:1)
您需要在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 ;