2011-04-13 38 views
6

Nói rằng tôi có một bảng như vậypostgresql tự tham gia

id |  device  | cmd | value | 
------+----------------+-------+--------- 

id = unique row ID 
device = device identifier (mac address) 
cmd = some arbitrary command 
value = value of corresponding command 

Tôi muốn bằng cách nào đó tự tham gia vào bảng này để lấy cmds cụ thể và giá trị tương ứng của họ đối với một thiết bị cụ thể.

Tôi không muốn chỉ SELECT cmd,value FROM table WHERE device='00:11:22:33:44:55';

Giả sử các giá trị Tôi muốn tương ứng với getnamegetlocation lệnh. Tôi muốn có kết quả đầu ra giống như

 mac   | name | location 
--------------------+-----------+------------ 
00:11:22:33:44:55 | some name | somewhere 

My sql fu is pretty pants. Tôi đã thử các kết hợp khác nhau như SELECT a.value,b.value FROM table AS a INNER JOIN table AS b ON a.device=b.device nhưng tôi không nhận được đâu.

Cảm ơn bạn đã được trợ giúp.

Trả lời

6
SELECT a.value AS thisval ,b.value AS thatval 
FROM table AS a JOIN table AS b USING (device) 
WHERE a.command='this' AND b.command='that'; 
+0

Cảm ơn vì điều đó. Tôi cho rằng nếu tôi muốn bốn giá trị thay vì hai, tôi cần ba JOIN? – tbh1

+0

Có, nhưng có thể bạn muốn xem xét lại cấu trúc cơ sở dữ liệu của mình nếu điều này quan trọng ;-) –

+0

Một khả năng khác là sử dụng nhóm và sắp xếp chúng trong danh sách lựa chọn. –

Các vấn đề liên quan