Можно ли избежать эффекта умножения? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть таблица «item», которая может быть связана с несколькими «program» и «topic».Когда я запрашиваю элементы (по программам), мне нужно получить 1 строку в наборе результатов, в которой идентификаторы программ и тем объединены в 1 поле.Если это возможно, я не знаю, как это сделать.Может кто-нибудь предложить мне несколько советов, чтобы избежать эффекта умножения строк, когда каждая комбинация программы и темы отображается в разных строках в наборе результатов?

1 Ответ

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

Звучит так, будто вы испытываете декартово произведение , потому что нет прямой связи между программами и темами.

Вы можете использовать GROUP_CONCAT () , если хотитесписок программ или тем, разделенных запятыми, которые «сгруппированы», как вы говорите.Но только одно выражение для программы и темы.

SELECT item.*, 
 GROUP_CONCAT(program.some_col) AS clummped_programs,
 GROUP_CONCAT(topic.some_col) AS clumped_topics
FROM item
LEFT JOIN program ON ...
LEFT JOIN topic ON ...
GROUP BY item.id

Но проще и удобнее выполнять несколько запросов, чтобы избежать декартова произведения.

SELECT item.*, program.*
FROM item
LEFT JOIN program ON ...

SELECT item.*, topic.*
FROM item
LEFT JOIN topic ON ...

Соблазнительно попытаться заставить все работать в одном запросе SQL, но иногда это не правильный способ решения проблемы.

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