Mysql UNION ALL创建双记录

用户名

我有以下表格:

平台:

-------------------------------------------------------
| id | team_id| name| url | logo
-------------------------------------------------------

job_platforms:

-------------------------------------------------------
| job_id | platform_id | startdate | enddate 
-------------------------------------------------------

我想创建一个链接到特定作业的所有平台的列表,无论是否包含开始日期和结束日期

-------------------------------------------------------
| id | url| logo| startdate | enddate 
-------------------------------------------------------

但是我被困在这一点上。创建开始日期和/或结束日期后,可以在job_platforms中找到平台。但是,当尚未为当前作业选择平台时,该平台将不会保存在job_platforms中。仅带有开始日期和/或结束日期的platform_id将存储在job_platforms中

最初,我想存储所有平台,无论平台是否被激活(开始日期和/或结束日期)。如果平台没有开始日期和/或结束日期,则这些字段将为null。

但是,当将新平台添加到平台列表中时,这将不起作用。所以我在考虑使用UNION,它使我接近想要的位置,但还没有安静:)

所以这就是我现在所拥有的:

SELECT DISTINCT
 platforms.id,
 platforms.url,
 platforms.logo,
 platforms.no_platform_site,
 job_platforms.startdate as startdate,
 job_platforms.enddate as enddate,
 platforms.team_id
FROM
 platforms
LEFT JOIN job_platforms ON job_platforms.platform_id = 
 platforms.id
WHERE 
 platforms.team_id IN (1,2,3,4,5)
AND 
 job_platforms.job_id = 30

UNION ALL
SELECT DISTINCT
 platforms.id,
 platforms.url,
 platforms.logo,
 platforms.no_platform_site,
 null as startdate,
 null as enddate,
 platforms.team_id
FROM
 platforms
LEFT JOIN job_platforms ON job_platforms.platform_id = 
 platforms.id
WHERE 
 platforms.team_id IN (1,2,3,4,5)

此查询发生的情况是,我获得了链接到job_id 30的所有正确平台,但是当startdate不为空时,记录出现两次。空日期1次,开始日期1次。

在这里上传了结果集的图片

我该如何更改查询,以便不会显示重复记录?

提前致谢!

戈登·利诺夫

我想你只想要一个left join

SELECT DISTINCT p.id, p.url, p.logo, ps.no_platform_site,
       jp.startdate as startdate, jp.enddate as enddate,
       p.team_id
FROM platforms p LEFT JOIN
     job_platforms jp
     ON jp.platform_id = p.id AND jp.job_id = 30
WHERE p.team_id IN (1, 2, 3, 4, 5);

笔记:

  • 重要的部分是jp.job_id = 30进入ON条款。WHERE子句中,它将外部联接转换为内部联接。
  • 我介绍了表别名,因此查询更易于编写和阅读。
  • 我怀疑你真的需要SELECT DISTINCT如果没有,请将其删除。它只会增加开销。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章