2011-07-07 34 views
7

Tôi có bảng sau:sql tham gia 2 hàng trong cùng một bảng

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

Tôi muốn có kết quả như thế này:

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

Làm thế nào tôi có thể làm điều đó?

Trả lời

16

nó được gọi là tự tham gia. Bí quyết là sử dụng bí danh.

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

Truy vấn giả định rằng mỗi tên có địa chỉ nhưng số điện thoại là tùy chọn.

+2

Được gõ này trong (gần như nguyên văn) khi câu trả lời của bạn xuất hiện. – Chad

+0

Xảy ra cho tôi rất nhiều, quá :-) – cdonner

+0

Là oracle thực sự có thể tham gia ** bất cứ điều gì ** ??? – Bitterblue

0

Something như thế này:

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); 
Các vấn đề liên quan