2011-07-07 30 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);