合并两个不相交的 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';
假设我们有三个 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';