Re: [postgresql-it] join con un campo alias
- From: Daniele Varrazzo <piro@xxxxxxxxxxx>
- To: <postgresql-it@xxxxxxxxxxxxx>
- Date: Wed, 12 Dec 2012 10:51:27 +0100
On 2012-12-11 12:52, Roberto Marzialetti wrote:
ciao
ho due campi
- data_incasso
- stato_incasso_id -> FK tabella stati_incassi
(si, ho sbagliato lo schema del db...)
adesso vorrei eliminare il campo "stato_incasso_id" desumendolo da
"data_incasso", ma non vorrei fare troppi danni allo
schema/applicazione. quindi. pensavo di fare:
CASE
WHEN data_incasso IS NULL
THEN 'DIN' ELSE 'ATC' -- che sono i valori nella tabella
stati_incassi
END AS stato_incasso_id
INNER JOIN stato_incasso_id ON stati.stato_incasso_id
ma ovviamente non me lo fa fare...
Si può fare con una sottoquery, ma le possibilità di ottimizzazione
della query che dai al database vengono ridotte di parecchio. I full
scan della tabella sono quasi certi: se la tabella è grande può essere
un problema. Avere il campo su cui fare il join esplicito è meglio.
Quello di sopra puoi farlo con la sottoquery con qualcosa tipo:
select ... from (
select f1, f2,
CASE WHEN data_incasso IS NULL
THEN 'DIN' ELSE 'ATC' END AS stato_incasso_id) x
INNER JOIN stati_incassi s ON s.id = x.stato_incasso_id
o anche, meglio, un'espressione nel join:
select ... from tabella t
join stati_incassi t
on t.id = (case when data_incasso is null then 'DIN' else 'ATC'
end);
pensavo quindi di usare tanti case quanti ne ho bisogno
[...]
ma non mi piace molto...
teribbile...
con un trigger?
Il trigger non ti serve sulla select, ma col trigger ci puoi mantenere
stato_incasso_id in sincrono con data_incasso, che poi ti aiuta a usare
il join in maniera naturale, che è la soluzione migliore.
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Other related posts: