sql >> Base de Datos >  >> RDS >> Mysql

SELECCIONE de dos tablas basadas en la misma identificación y agrupadas

Un union se adaptaría a tu problema. Se requiere algún masaje de datos para dar a ambos lados de la unión el mismo número y tipo de columnas:

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

Ejemplo de trabajo en SQL Fiddle.

Para formatear el conjunto de resultados como desee, itere sobre el conjunto de resultados. Cuando el group_id cambios, imprima un # Group N # encabezado.

No debería haber necesidad de tener otros bucles o iteraciones del lado del cliente, solo un foreach o equivalente sobre el conjunto de filas devueltas por la consulta.