Таблица пользователей:
ID InstructionSets
1 123,124
Таблица набора инструкций:
ID Name
123 Learning SQL
124 Learning More SQL
Желаемый результат запроса:
UserID SetID SetNames
1 123,124 Learning SQL,Learning More SQL
Текущий SQL:
SELECT U1.ID AS UserID, U1.InstructionSets AS SetID, (
SELECT GROUP_CONCAT(Name ORDER BY FIELD(I1.ID, U1.InstructionSets))
FROM Instructions I1
WHERE I1.ID IN (U1.InstructionSets)
) AS SetName
FROM Users U1
WHERE `ID` = 1
РЕЗУЛЬТАТ
UserID SetID SetNames
1 123,124 Learning SQL
Как и ожидалось, если я удалю предложение WHERE в подзапросе, появятся все SetNames; но если я укажу необходимые идентификаторы, я получу только имя, связанное с первым идентификатором. Очевидно, мне также нужно получить SetNames в том же порядке, что и идентификаторы. Следовательно, ORDER BY в GROUP_CONCAT.
Также:
- Есть ли лучший подход (кроме хранения назначений пользовательских команд в отдельной таблице - излишнее для этого приложения)? Не могу увидеть, как использовать JOIN в этом
ситуация.
- Есть ли лучшее название для этого вопроса?
Спасибо.