@lexstile

Почему SQL-запрос возвращает дубли?

Запрос:
SELECT 
    events.id, events.name as event_name, events.date_start, events.date_end, events.country_id, events.description, events.day_1, events.day_2, events.month_1, 
    events.month_2, events.year_1, events.year_2, events.is_present, links.links, images.images, countries.countries, clusters.clusters 
  FROM events
  LEFT JOIN event_to_country etc ON etc.event_id = events.id
    LEFT JOIN (
    SELECT countries.id, event_to_country.event_id, GROUP_CONCAT(countries.name) as countries
    FROM countries
    LEFT JOIN event_to_country ON countries.id = event_to_country.country_id
    GROUP BY event_to_country.event_id
  ) as countries ON events.id = countries.event_id
    LEFT JOIN (
    SELECT event_id, GROUP_CONCAT(link) as links
    FROM links
    GROUP BY event_id
  ) AS links ON events.id = links.event_id
    LEFT JOIN (
    SELECT event_id, GROUP_CONCAT(name) as images
    FROM images
    GROUP BY event_id
  ) AS images ON events.id = images.event_id
    LEFT JOIN keywords ON events.id = keywords.event_id
    LEFT JOIN (
    SELECT country_id as c_id, GROUP_CONCAT(name) as clusters
    FROM clusters
    GROUP BY c_id
  ) AS clusters ON countries.id = c_id
   WHERE (events.name LIKE 'test' || events.description LIKE 'test' || keywords.name LIKE 'test') AND (etc.country_id = 2 OR etc.country_id = 8)
    ORDER BY events.year_1 ASC
    LIMIT 30

Предыстория: ссылка.
5f7e1625b968d637061676.png
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@alexalexes
Выведите все свойства выборки - увидите разницу в строках.
SELECT *
  FROM

Нужны уникальные строки - придумайте как их проранжировать и отсечь лишние порядковые номера ранжа.
Если лень разбирать, то используйте distinct, скорость выборки будет страдать, если строк и колонок много.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы