2016-11-18 2 views
0

У меня есть одна таблицы, содержащие коды стран и языки ИдентификаторыMYSQL Соединить колонны без группировки

+------+------+-------------+ 
| id | iso | language_id | 
+------+------+-------------+ 
| 1 | US |  4  | 
| 2 | IE |  1  | 
| 3 | DE |  2  | 
| 4 | SG |  1  | 
| 5 | FR |  3  | 
| 6 | UK |  1  | 
| 7 | AT |  2  | 
+------+------+-------------+ 

Что мне нужно, это заявление MySQL, который возвращает результирующий набор, содержащий КАЖДЫЙ ISO и каскадную строку идентификаторов где код языка соответствует

таким образом, в приведенном выше примере, я ищу, чтобы получить

+------+------+----------+ 
| id | iso | id_group | 
+------+------+----------+ 
| 1 | US |  4 | 
| 2 | IE | 2,4,6 | 
| 3 | DE | 3,7 | 
| 4 | SG | 2,4,6 | 
| 5 | FR |  5 | 
| 6 | UK | 2,4,6 | 
| 7 | AT | 3,7 | 
+------+------+----------+ 

Моей лучшую попытку до сих пор показан ниже, и в sqlfiddle ссылки , но группировка исключает некоторые из ИСО. Мне нужно, чтобы вернуть каждую строку

SELECT iso, language_id, GROUP_CONCAT(id) as id 
FROM countries 
GROUP BY language_id 

http://sqlfiddle.com/#!9/907618/3

это может быть сделано с MySQL или мне нужно запустить много заявлений, чтобы получить результаты?

Благодаря

+0

Лично я бы не сделал часть конкатенации в MySQL, но в любом случае ее можно легко выполнить. Это просто ПРИСОЕДИНЯЙТЕСЬ. – Strawberry

+0

Не могли бы вы рассказать подробнее. Как я уже сказал, это была моя лучшая попытка. Спасибо – Typhoon101

+0

Ваша лучшая попытка не имеет соединения. Попробуйте использовать JOIN. Это почти невозможно, что вы не можете это решить. – Strawberry

ответ

2

Этот запрос возвратит все ID для каждого языка ID:

select language_id, GROUP_CONCAT(id ORDER BY id) as id_group 
from countries 
group by language_id 

тогда вы просто должны присоединиться этот запрос со странами таблицы:

select 
    c.id, 
    c.iso, 
    g.id_group 
from 
    countries c inner join (
    select language_id, GROUP_CONCAT(id ORDER BY id) as id_group 
    from countries 
    group by language_id 
) g on c.language_id = g.language_id 
order by 
    c.id 

без подзапроса вы можете использовать самоподключение:

select 
    c.id, 
    c.iso, 
    group_concat(c1.id order by c1.id) as id_group 
from 
    countries c inner join countries c1 
    on c.language_id = c1.language_id 
group by 
    c.id, 
    c.iso 
+0

Здесь нет необходимости в подзапросе. Достаточно присоединиться. – Strawberry

+0

@Strawberry да, это правда, но я думаю, что подзапрос становится понятнее и понятнее – fthiella

+0

Возможно, мы сможем согласиться не согласиться. – Strawberry

Смежные вопросы