View Full Version : [MYSQL] SELECT DELLA STESSA COLONNA 2 VOLTE IN 1 QUERY
FrancoBross
29-08-2011, 15:13
ragazzi, volevo chiedervi se fosse possibile fare una select di una stessa colonna due volte con parametri diversi. Tipo:
select nome, nome from squadra where condizione and altracondizione
la mia idea è quella di usare una alias o qualcosa del genere. Ma non so se è proprio possibile farlo. qualcuno che mi ILLUMINI...
Non ho un mysql velocemente raggiungibile, ma se la memoria non mi tradisce, questo dovrebbe essere standard (su oracle funziona almeno...)
select dummy as "O' rly?", dummy as "Ya, rly" from dual
ps. cioè, ovvio che "dummy" è una colonna di "dual" e questa è una tabella che c'è solo su oracle, di default. Quindi devi sostituire i nomi con quello che serve a te.
Master FO
29-08-2011, 15:26
Certo che è possibile...
FrancoBross
29-08-2011, 15:30
Non ho un mysql velocemente raggiungibile, ma se la memoria non mi tradisce, questo dovrebbe essere standard (su oracle funziona almeno...)
select dummy as "O' rly?", dummy as "Ya, rly" from dual
ps. cioè, ovvio che "dummy" è una colonna di "dual" e questa è una tabella che c'è solo su oracle, di default. Quindi devi sostituire i nomi con quello che serve a te.
eh, ora si che sono confuso :D mi pare che in mysql non si esista dual, ma non ne sono convintissimo. In ogni caso non è quello il problema. cioè se io faccio l'alias sulle colonne poi nelle condizioni posso specificare a quale colonna faccio riferimento?
FrancoBross
29-08-2011, 15:38
Certo che è possibile...
sai dirmi di più :help:
cioè se io faccio l'alias sulle colonne poi nelle condizioni posso specificare a quale colonna faccio riferimento?
Ah ok, non avevo mica capito.
No non puoi, a meno che tu non faccia una join con la tabella stessa, tipo...
select t1.a as "A1", t2.a as "A2" from tab t1 join tab t2 on ...qualcosa...
where t1.a = ...qualcosa...
and t2.a = ...qualcosa...
Ma sei sicuro di dover fare questa cosa? Qual'è il problema reale?
FrancoBross
29-08-2011, 15:53
il join penso proprio che sia fondamentale...provo a spiegarti il problema cn questo esempio perchè non penso sia la soluzione che serve a me quella che mi hai gentilmente proposto tu:
io ho una tabella squadre dove ho 2 colonne rispettivamente id_squadra e nome squadra. poi ho una tabella partita dove ho l'id_partita. queste due tabelle sono relazionate ad una terza tabella gioca. dove ho l'id_partita di partita e id_squadra (2 volte) che mi rappresenta appunto l'incontro associato.
ora io attraverso una select vorrei stampare dalla tabella gioca i nomi delle squadre che si affronteranno. il gioco dei join mi è chiaro, ma nella select cosa richiamo?
Un altra soluzione è fare due volte la select una per esempio per le squadre che per quel turno figurano in casa l'altro per le squadre che per quel turno figurano in trasferta. ma siccome non ho esigenze mi sono permesso di avere questo dubbio. concludo dicendo che neanche sul manuale ho trovato qualcosa di utile x me
il join penso proprio che sia fondamentale...provo a spiegarti il problema cn questo esempio perchè non penso sia la soluzione che serve a me quella che mi hai gentilmente proposto tu:
io ho una tabella squadre dove ho 2 colonne rispettivamente id_squadra e nome squadra. poi ho una tabella partita dove ho l'id_partita. queste due tabelle sono relazionate ad una terza tabella gioca. dove ho l'id_partita di partita e id_squadra (2 volte) che mi rappresenta appunto l'incontro associato.
ora io attraverso una select vorrei stampare dalla tabella gioca i nomi delle squadre che si affronteranno. il gioco dei join mi è chiaro, ma nella select cosa richiamo?
Un altra soluzione è fare due volte la select una per esempio per le squadre che per quel turno figurano in casa l'altro per le squadre che per quel turno figurano in trasferta. ma siccome non ho esigenze mi sono permesso di avere questo dubbio. concludo dicendo che neanche sul manuale ho trovato qualcosa di utile x me
No aspetta un attimo... a te basta mettere in join la tabella 'gioca' due volte con la tabella 'squadre', una per ogni colonna 'id_squadra' di 'gioca'.
FrancoBross
29-08-2011, 16:20
due volte nella stessa select? e a che serve?
sirHydra
29-08-2011, 18:45
In questo momento non ho a disposizione un server per controllare ma dovrebbe essere qualcosa del tipo:
SELECT TeamHome.NomeSquadra, "VS", TeamAway.NomeSquadra
FROM (Squadre AS TeamHome INNER JOIN Incontri ON TeamHome.idSquadra=Incontri.Squadra1) INNER JOIN Squadre AS TeamAway ON Incontri.Squadra2=TeamAway.idSquadra
Incontri è la tabella che relaziona Squadre e Partite(non di interesse per questa query).
Per una maggior chiarezza ho esplicitato i campi della tabella Incontri anche se non è richiesto, avendo suddetti campi necessariamente intestazioni differenti.
FrancoBross
29-08-2011, 19:04
In questo momento non ho a disposizione un server per controllare ma dovrebbe essere qualcosa del tipo:
SELECT TeamHome.NomeSquadra, "VS", TeamAway.NomeSquadra
FROM (Squadre AS TeamHome INNER JOIN Incontri ON Incontri.Squadra1=TeamHome.idSquadra) INNER JOIN Squadre AS TeamAway ON Incontri.Squadra2=TeamAway.idSquadra
Incontri è la tabella che relaziona Squadre e Partite(non di interesse per questa query).
Per una maggior chiarezza ho esplicitato i campi della tabella Incontri anche se non è richiesto, avendo suddetti campi necessariamente intestazioni differenti.
grazie di cuore era proprio quello che cercavo. sono parecchio, ma parecchio arrugginito con sql. Era proprio quello che cercavo. Davvero gentile grazie di cuore.
Domando giusto per curiosità, anche se questa soluzione è ottima, ma senza alias si poteva fare? io penso di no...
sirHydra
29-08-2011, 19:26
Figurati :)
Senza alias sarebbe un bell'esperimento :p
A naso no, perchè per la selezione finale ci sarebbe un'ambiguità sul campo nomeSquadra.
I 2 join sulla stessa tabella infatti creano un tabellone contenente i duplicati di tutti i campi di Squadra.
FrancoBross
29-08-2011, 20:00
Figurati :)
Senza alias sarebbe un bell'esperimento :p
A naso no, perchè per la selezione finale ci sarebbe un'ambiguità sul campo nomeSquadra.
I 2 join sulla stessa tabella infatti creano un tabellone contenente i duplicati di tutti i campi di Squadra.
non ci crederai ma ci ho provato e risulta l'ambiguità. Per i duplicati al max si risolve con un distinct, ma non mi interessa la prima soluzione è quella che volevo.
Ancora grazie...e ovviamente grazie anche a tutti gli altri ;)
sirHydra
29-08-2011, 20:13
Eccooolà :D
Una nota: ho editato sistemando la condizione sulla clausula ON del primo JOIN perchè nella fretta mi sono accorto di aver invertito i riferimenti posizionali campo-tabella richiesti.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.