Исчерпывающее объединение в MySQL - PullRequest
1 голос
/ 24 марта 2019

Вот снимок архитектуры SQL:

enter image description here

Я хочу выбрать все ключевые слова, связанные с данным путем.Это соединение, и я знаю, как это сделать.Моя проблема здесь в том, что я хочу, чтобы каждое ключевое слово было связано со всеми значками, связанными с данным путем, а не только с одним.

Давайте рассмотрим пример, давайте рассмотрим, что путь с именем warning связан с 3 значками (предупреждение-круг, предупреждение-треугольник и предупреждение-квадрат):

  • знак предупреждения (ключевые слова = warning, mark и circle)
  • знак предупреждения (ключевые слова = warning, mark и triangle)
  • квадрат предупреждения (ключевые слова = warning, mark и square)

Выполнение объединения выберетвсе ключевые слова: warning, circle, triangle и square.

Я хочу выбрать только ключевые слова warning и mark, поскольку все значки связаны с этими ключевыми словами.,Я не хочу выбирать круг or треугольник or квадрат`, потому что они не относятся ко всем значкам.

Есть идеи, как это сделать?

1 Ответ

1 голос
/ 24 марта 2019

Не видя примеров данных, трудно быть уверенным, но что-то вроде этого должно работать:

SELECT k.keyword
FROM paths p
JOIN icons i ON i.id_path = p.id
JOIN keywords_icons ki ON ki.id_icon = i.id
JOIN keywords k ON k.id = ki.id_keyword
WHERE p.name = 'warning'
GROUP BY k.keyword
HAVING COUNT(i.id) = (SELECT COUNT(DISTINCT i.id)
                      FROM paths p
                      JOIN icons i ON i.id_path = p.id
                      WHERE p.name = 'warning'
                      GROUP BY p.id)

Я создал демо на dbfiddle , где я пытался эмулироватьчто вы описываете, чтобы вы могли видеть, как работает запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...