繁体   English   中英

SQL比较条件列选择要加入的表

[英]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 JOINON子句变为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM