Query PostgreSQL 9.0 tabella sul valore chiave esterna?
-
16-10-2019 - |
Domanda
Noob-tipo di domanda:
Di 'Ho due tabelle, caramelle e colori. La tabella di colori tiene le coppie appena codice / valore come 01 giallo, 02 blu, 03 verdi, ecc e viene fatto riferimento nella tabella caramelle dal codice.
Come faccio a interrogare le caramelle da tavolo per tutte le caramelle blu senza un esplicito si uniscono? Per due anni ho scritto queste query con join, come:
SELECT * FROM caramelle un JOIN colori o ON (a.color_code = o.color_code)
DOVE = o.color_value 'blu';
Sono sicuro ogni volta che sto portando una pistola ad una lotta coltello, ma il mio googling è stata infruttuosa.
Grazie.
Soluzione
"Sono certo ogni volta che sto portando una pistola ad una lotta coltello, ma il mio googling è stato inutile." Cosa te lo fa pensare? RDBMS sono costruiti per 'unire'
Se il vostro scopo è quello di farvi SQL più leggibile allora si potrebbe preferire la ' usando ' sintassi:
SELECT * FROM candies JOIN colors USING(color_code) WHERE color_value = 'blue';
In alternativa, visto che si è hard-codifica 'blu' nella tua ricerca, si potrebbe prendere in considerazione a livello di codice il codice invece:
SELECT * FROM candies WHERE color_code = '02';
ma questo diminuirà la leggibilità a meno che nello scenario del mondo reale i codici sono descrittivi (ad esempio 'BLU' per il blu)
Altri suggerimenti
Si può scrivere come:
select
ca.*
from
candies ca
where
ca.color_code = (
select co.color_code
from colors co
where co.color_value = 'blue'
)
ma ci dovrebbe essere alcuna differenza. In realtà il join approccio è un po 'più robusto.
Cosa c'è di più - considerare sbarazzarsi della tabella colori a tutti, e utilizzando solo color_values ??invece di codici. In realtà è più efficiente.