2011-07-07 11 views
7

tengo la siguiente tabla:SQL JOIN 2 filas de la misma tabla

Name Type  Value 
--------------------- 
mike phone 123  
mike address nyc  
bob address nj  
bob phone 333 

Quiero tener el resultado como este:

name value value 
------------------- 
mike nyc 123 
bob nj  333 

¿Cómo puedo hacerlo?

Respuesta

16

se llama auto unión. el truco es usar alias.

select 
    address.name, 
    address.value as address, 
    phone.value as phone 
from 
    yourtable as address left join 
    yourtable as phone on address.name = phone.name 
where address.type = 'address' and 
     (phone.type is null or phone.type = 'phone') 

La consulta supone que cada nombre tiene una dirección, pero los números de teléfono son opcionales.

+2

estaba escribiendo esto en (casi literalmente) cuando su respuesta apareció. – Chad

+0

Me sucede a mí también :-) – cdonner

+0

¿Es Oracle realmente capaz de unirse ** ANYTHING ** ??? – Bitterblue

0

Algo como esto:

SELECT a.name AS name, phone, address 
    FROM (SELECT name, value AS phone FROM mytable WHERE type = "phone") AS a 
    JOIN (SELECT name, value AS address FROM mytable WHERE type = "address") AS b 
    ON(a.name = b.name); 
Cuestiones relacionadas