合并两个不相交的 SELECT 查询

Combining two SELECT query that Do not Intersect

假设我们有三个 table。 Table 2 和 3 与 table 1 相交,但彼此不相交。

两个单独的 INNER JOIN 查询获取 table 1 & 2 和 table 1 & 3 之间的公共列值。

现在我的问题是如何将这两个交叉点放在一起;简单地 INNER JOINing 这些 table 不会产生任何结果:

以下将是一个理想的结果。

这已经接近我想要的结果,但还不够接近。

SELECT * FROM 
 (SELECT `tag_map`.`id`,`resource`.`resource_type_id`,`resource`.`title` FROM `tag_map`
        INNER JOIN `resource`
        ON `tag_map`.`tag_id` = '8'
            AND `tag_map`.`entity_type_id`= '1'
            AND `resource`.`id` = `tag_map`.`entity_id`) AS t1
INNER JOIN 
 (SELECT `name`,`location` FROM `tag_map`        
        INNER JOIN `userinfo`
        ON `tag_map`.`tag_id` = '8'
            AND `tag_map`.`entity_type_id`= '2'
            AND `userinfo`.`id` = `tag_map`.`entity_id`) AS t2

这个查询的问题是 JOIN 子句混合了行,我得到了这个

您只需要从 table 开始查询,与其他两个相交,然后 LEFT JOIN 在它们上:

SELECT r.resource_type_id, 
       r.title, 
       u.name 
FROM   tag_map t 
       LEFT JOIN userinfo u 
              ON t.entity_id = u.id 
                 AND t.entity_type_id = '1' 
       LEFT JOIN resource r 
              ON t.entity_id = r.id 
                 AND t.entity_type_id = '2' 
WHERE  ( u.id IS NOT NULL 
          OR r.id IS NOT NULL ) 
       AND t.entity_type_id IN ( '1', '2' ) 
       AND t.tag_id = '1';