2011-04-13 12 views
6

Say Ho una tabella in questo modosé postgresql join

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

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

desidero qualche modo auto join su questa tabella per afferrare cmds specifici ei valori corrispondenti per un particolare dispositivo.

Non voglio solo SELECT cmd,value FROM table WHERE device='00:11:22:33:44:55';

dicono i valori che voglio corrispondono ai comandi getname e getlocation. Mi piacerebbe avere qualcosa di simile a

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

Il mio sql fu è un bel pantalone. Ho provato diverse combinazioni come SELECT a.value,b.value FROM table AS a INNER JOIN table AS b ON a.device=b.device ma non sto andando da nessuna parte.

Grazie per qualsiasi aiuto.

risposta

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

Grazie per quello. Suppongo che se volessi quattro valori anziché due, avrei bisogno di tre JOIN? – tbh1

+0

Sì, ma forse si desidera riconsiderare la struttura del database se questo è importante ;-) –

+0

Un'altra possibilità sarebbe quella di utilizzare il gruppo per ordinarli nell'elenco di selezione. –