Mysql UNION ALL создает двойные записи - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть следующие таблицы:

платформы:

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

job_platforms:

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

Я хотел бы создать список всех платформ, связанных сконкретная работа с начальной и конечной датой и без нее

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

Но я застрял в этой точке.Когда начальная дата и / или конечная дата была создана, платформу можно найти в job_platforms.Но когда платформа не была выбрана для текущей работы, платформа не будет сохранена в job_platforms.Только идентификаторы платформы с начальной датой и / или конечной датой будут храниться в job_platforms

Сначала я думал о сохранении всех платформ, независимо от того, активирована платформа или нет (начальная дата и / или конечная дата).Если у платформы нет начальной даты и / или конечной даты, поля будут нулевыми.

Но это не будет работать, когда новые платформы будут добавлены в список платформ.Так что я подумал об использовании UNION, и это приближает меня к тому месту, где я хочу быть, но пока не тихоЧто происходит с этим запросом, так это то, что я получаю все нужные платформы, которые связаны с job_id 30, но когда начальная дата не пуста, запись появляется дважды.1 раз с пустой датой и 1 раз с начальной датой.

Я загрузил изображение набора результатов здесь

Как я могу изменить свой запрос, чтобы двойные записи не отображались?

Заранее спасибо!

1 Ответ

0 голосов
/ 01 февраля 2019

Я думаю, вы просто хотите 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.Если нет, удалите его.Это только добавляет накладные расходы.
...