2011-07-07 9 views
7

同じテーブル内の2行を結合:SQLは、私は次の表持つ

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

私はそれをどのように操作を行うことができます。

Name Type  Value 
--------------------- 
mike phone 123  
mike address nyc  
bob address nj  
bob phone 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は実際に参加できますか?**何でもいいですか? – 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); 
関連する問題