2010-06-11 13 views
10

que tienen esta consulta (que me quita algunas de las claves de por el bien de la brevedad):¿Cómo puedo agregar una columna a este resultado de unión?

SELECT id as in_id, out_id, recipient, sender, read_flag 
    FROM received WHERE recipient=1 
UNION ALL 
SELECT in_id, id AS out_id, recipient, sender, read_flag 
    FROM sent WHERE sender=1 

que combina los resultados de dos tablas que muestran los mensajes enviados y recibidos por un usuario determinado. Lo que me gustaría hacer es agregar una columna/indicador al resultado para distinguir a qué tabla pertenece la fila, de modo que cuando los muestre, pueda mostrar un icono relevante para los mensajes enviados o recibidos. ¿Cómo agregaría esto?

Respuesta

16

Simplemente agregue una columna constante a cada consulta. No importa el tipo, siempre y cuando sea igual en ambas partes. Lo que podría utilizar 0 y 1 o dos cadenas, por ejemplo:

SELECT id as in_id, out_id, recipient, sender, read_flag , 'received' as source 
    FROM received WHERE recipient=1 
UNION ALL 
SELECT in_id, id AS out_id, recipient, sender, read_flag , 'sent' as source 
    FROM sent WHERE sender=1 
+0

Awesome gracias! +1 –

+0

Pregunta muy útil y una respuesta excelente! Gracias –

+0

Gracias @Mark Byers – aziz

2

Simplemente añadir la columna en cada seleccione con un valor codificado:

 
SELECT id as in_id, out_id, recipient, sender, read_flag, 'received' as source_table 
    FROM received WHERE recipient=1 
UNION ALL 
SELECT in_id, id AS out_id, recipient, sender, read_flag, 'sent' as source_table 
    FROM sent WHERE sender=1 
+0

¡Y gracias también! –

2

Esto lo hará:

SELECT 'r' as type, id as in_id, out_id, recipient, sender, read_flag 
    FROM received WHERE recipient=1 
UNION ALL 
SELECT 's' as type, in_id, id AS out_id, recipient, sender, read_flag 
    FROM sent WHERE sender=1 
+0

¡Todos son tan amables, gracias! –

Cuestiones relacionadas