2011-07-07 28 views
7

加入2行,我有以下表格:SQL在同一个表

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

我想有结果是这样的:

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

我该怎么办呢?

回答

16

它被称为自连接。诀窍是使用别名。

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') 

该查询假定每个名称都有一个地址,但电话号码是可选的。

+2

是(几乎一字不差)当你的答案出现了打字。 – Chad

+0

对我来说也发生了很多:-) – cdonner

+0

实际上oracle是否可以加入** ANYTHING ** ??? – Bitterblue

0

事情是这样的:

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);