Uma
union
atenderia ao seu problema. Alguma massagem de dados é necessária para dar a ambos os lados da união o mesmo número e tipo de colunas:select group_id
, id as item_id
, name
, description
, source_table
from (
select id
, user_id
, group_id
, name
, description
, 'from table1' source_table
from table1
union all
select id
, user_id
, group_id
, name
, description
, 'from table2' -- Column name is already defined above
from table2
) as SubQueriesMustBeNamed
where user_id = 1
order by
group_id
, name
Exemplo de trabalho no SQL Fiddle.
Para formatar o conjunto de resultados como desejar, itere sobre o conjunto de resultados. Quando o
group_id
alterações, imprima um # Group N #
cabeçalho. Não deve haver necessidade de ter outros loops ou iterações do lado do cliente, apenas um
foreach
ou equivalente sobre o conjunto de linhas retornado pela consulta.