2016-12-01 4 views
0

У меня есть записи, которые я хочу объединить, но они находятся в разных столбцах. Я знаю, group_contat() будет делать, но я не знаю, чтобы вставить его.Как использовать функцию group_contat() в нескольких таблицах?

Вот мой SQL запрос:

select * from 
info join crew_documents_table on info.id = crew_documents_table.document_crew_id 
join crew_rank on info.crew_rank = crew_rank.crew_rank_id where crew_rank in ('1','2','3','4') 
and crew_status = '$crew_status' 
and vessel = '$vessel_name' and document_status = 'ACTIVE' 

Я ожидаю, что этот вид результата: http://imgur.com/a/82MYc

Но это дает мне много строк для каждой записи

EDIT

Вот мой образец таблицы:

Таблица информации:

id   | full_name |crew_rank 
    -------------|-------------|------------ 
    1   |ADRIAN PASCUA|10 
    -------------|-------------|------------ 
    4   |STEPH PASCUA | 10 

стол crew_documents_table

doc_type | doc_number | date_issue | document_crew_id 
-----------|----------- |-------------|----------------- 
1   | 123456  | 2016/11/11 | 1 
-----------|----------- |-------------|----------------- 
1   | 642312  | 2016/11/01 | 4 
-----------|----------- |-------------|----------------- 
2   | 123456  | 2016/11/11 | 1 
-----------|----------- |-------------|----------------- 
2   | 642312  | 2016/11/01 | 4 

Мне нужно объединить столбец doc_type 1 и doc_type_2 с тем же document_crew_id

+0

в вашем img нет значений group_concat ... – scaisEdge

+0

Можете ли вы предоставить образец/пример ваших таблиц? – Kulvar

+0

в порядке. я отредактирую свое сообщение –

ответ

0

Может быть, вы можете использовать внутреннее соединение с динамическим столом с группой CONCAT() поэтому вы можете получить все столбцы плюс сгруппированные значения

select *, t.grouped 
    from info 
    join crew_documents_table on info.id = crew_documents_table.document_crew_id 
    join crew_rank on info.crew_rank = crew_rank.crew_rank_id 
    join (
     select document_crew_id, group_concat(doc_type) as grouped 
     from crew_documents_table 
     group by document_crew_id 
    ) t on t.document_crew_id = info.id 
    where crew_rank in ('1','2','3','4') 
    and crew_status = '$crew_status' 

В вашем запросе вы используете select *. это, в отличии от необходимости получения группы по значению

вы можете попробовать это для проверки

select distinct info.id, t.grouped 
    from info 
    join crew_documents_table on info.id = crew_documents_table.document_crew_id 
    oin crew_rank on info.crew_rank = crew_rank.crew_rank_id 
    join (
     select document_crew_id, group_concat(doc_type ) as grouped 
     from crew_documents_table 
     group by document_crew_id 
    ) t on t.document_crew_id = info.id 
    where crew_rank in ('1','2','3','4') 
    and crew_status = '$crew_status' 

Когда вам нужна группа по значению у вас есть две возможности или присоединиться к группе по в динамической таблице, как в моем первом asnwer или, если каждое отдельное значение не важно, вы shoudl уменьшите форму результата основного выбора, используя группу и (фальшивую) функцию агрегации

+0

Могу ли я спросить? что такое 't' on' t.grouped'? что это значит? Извините за немой вопрос –

+0

Я получаю значение group_concat, используя результат подзапроса, подобный таблице. T - это имя этой таблицы, созданной динамически. я могу правильно присоединить результат из этой таблицы к другим, используя имя таблицы в качестве псевдонима и использовать имя столбца (t.grouped - это имя сгруппированного столбца из таблицы t). Надеюсь, что это понятно .. – scaisEdge

+0

Я попробовал ваш ответ, но выход все тот же. он не объединяет столбцы –

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