Добавление нулевых значений для записей, которых нет в объединенной таблице - PullRequest
0 голосов
/ 25 марта 2020

У меня есть таблица с именем top_trends, которая имеет следующую схему:

id int(11) AI PK 
criteria_id int(11) 
value varchar(255) 
created_at timestamp 
updated_at timestamp

Затем у меня есть другая таблица с именем search_criterias, которая имеет следующую схему:

id int(11) AI PK 
title varchar(255) 
created_at timestamp 
updated_at timestamp

Вот запрос, который предоставляет значение на основе максимального количества записей по значению. Итак, если есть 2 записи в top_trends, в которых обе имеют criteria_id в качестве 1, и обе имеют значения 3 в столбце top_trends.value, а затем отдельную запись SINGLE с таким же параметром crit_id 1, но значением 2, запрос выдаст результат, когда выбранные критерии (равные 1) имеют значение 3, поскольку значение 3 встречается больше раз, чем любые другие строки значений с crit__1. Таким образом, в простых терминах запрос выбрал значение 3 для идентификатора критерия 1 потому что это происходило чаще всего на основе записей в top_trends, имеющих criteria_id 1

select
  x.value as `values`
  , sc.id as id
  , sc.title
  , sc.created_at
  , sc.updated_at
  , x.criteria_id as search_category_id 
from
  ( 
    select
      criteria_id
      , `value` 
    from
      top_trends 
    group by
      `criteria_id` 
    order by
      `value`
  ) x 
  left join search_criterias sc 
    on sc.id = x.criteria_id 
group by
  criteria_id

Моя проблема в том, что, к сожалению, сейчас у нас нет данных для всех возможных search_criterias, поэтому некоторые из записи в таблице search_criteria не объединяются в моем запросе.

Например, у нас есть запись search_criteria для города с идентификатором 5, но в таблице top_trends нет записей с критерием_данных 5 ... поэтому приведенный выше запрос не включает этот критерий поиска.

Что я хотел бы сделать, так это включить в таблицу search_criteria те записи, которые не находятся в таблице top_trends, но имеют атрибут values как null

1 Ответ

0 голосов
/ 25 марта 2020

LEFT JOIN используется, когда в левой таблице есть строки, которые не совпадают в правой таблице. Поскольку отсутствующие строки в вашем случае находятся в top_trends, это должна быть правая таблица LEFT JOIN. Так что поменяйте порядок объединения.

select
  x.value as `values`
  , sc.id as id
  , sc.title
  , sc.created_at
  , sc.updated_at
  , x.criteria_id as search_category_id 
from search_criterias sc 
left join
  ( 
    select
      criteria_id
      , `value` 
    from
      top_trends 
    group by
      `criteria_id` 
    order by
      `value`
  ) x 
    on sc.id = x.criteria_id 
group bysc.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...