我有以下表格:
平台:

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

作业平台:
-------------------------------------------------------
| job_id | platform_id | startdate | enddate
-------------------------------------------------------

我想创建一个所有平台的列表,这些平台链接到一个特定的作业,有或没有startdate和enddate
-------------------------------------------------------
| id | url| logo| startdate | enddate
-------------------------------------------------------

但我现在陷入了困境。当创建了startdate和/或enddate时,可以在job_platforms中找到平台。但是,如果尚未为当前作业选择平台,则不会将该平台保存在作业平台中。只有具有开始日期和/或结束日期的平台ID才会存储在作业平台中
一开始我想存储所有平台,不管平台是否激活(startdate和/或enddate)。如果平台没有startdate和/或enddate,则字段将为空。
但当新平台被添加到平台列表中时,这将不起作用。
所以我在考虑建立一个工会,它让我接近了我想要的位置,但还没有安静下来:)
这就是我现在所拥有的:
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次为开始日期。
我上传了结果集的图片here
如何更改查询以便不显示双记录?
提前谢谢!

最佳答案

我想你只是想要一个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。如果没有,请将其拆下。它只会增加开销。

关于mysql - Mysql UNION ALL创建双记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54481912/

10-13 00:36
查看更多