|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
[SQL] join con più campi da una sola tabella
Ciao, ho un problema con una join.
Ho una tabella in cui c'è un campo con l'id di una squadra in casa, e l'id di una squadra in trasferta... ovviamente poi dovrei andare a pescare i dati per la join dalla stessa tabella, solamente che ottengo l'errore #1066 - Tabella/alias non unico: 'squadre' come posso risolvere?
__________________
|
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
poi ho una tabella squadre in cui ho l'id e il relativo nome. Io vorrei stampare il calendario, ottenendo tutti i dati (giornata, e nomi delle due squadre) in una sola query. Codice:
SELECT * FROM partite INNER JOIN (tipopartite,squadre,squadre) ON (tipopartite.id=partite.tipo, squadre.id=partite.casa, squadre.id=partite.fuori) WHERE giornata =1
__________________
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2001
Città: milano, qualunque birreria
Messaggi: 4208
|
secondo me dovresti creare 2 alias della stessa tabella, una per esempio per i "fuori casa" e una per gli "in casa" così:
SELECT a.squadra, b.squadra FROM partite a, partite b quindi fare la join usando gli alias della tabella sostituiendo con a e b il nome della tabella
__________________
Save water: drink beer.
This message has been created with 100% recycled electrons Un rutto vale più di mille parole. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
[quote=wisher]cerco di spegare meglio, io ho una tabella partite con campi giornata, casa e trasferta (questi ultimi 2 contengono l'id della squadra)
poi ho una tabella squadre in cui ho l'id e il relativo nome. Io vorrei stampare il calendario, ottenendo tutti i dati (giornata, e nomi delle due squadre) in una sola query. Codice:
SELECT * FROM partite INNER JOIN (tipopartite,squadre,squadre) ON (tipopartite.id=partite.tipo, squadre.id=partite.casa, squadre.id=partite.fuori) WHERE giornata =1
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Una cosa così non funziona? Codice:
select par.campo, par.giornata, ( select s1.squadra from squadre s1 where s1.id = par.casa ) as squadra1 ), ( -- stessa cosa per la squadra in trasferta... ) from partite par where par.giornata = 1;
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
__________________
|
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
solo che nn essendo minimamente esperto in SQL è la prima cosa che ho trovato che sembrava fare quello che volevo
__________________
|
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
giornata casa fuori mentre squadre ha i campi id nome ovviamente i valori contenuti in casa e fuori di partite corrispondono all'id di squadre
__________________
|
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
(SELECT squadre.nome FROM partite, squadre WHERE squadre.id = partite.casa), (SELECT squadre.nome FROM partite, squadre WHERE squadre.id = partite.fuori) FROM partite, squadre WHERE partite.giornata = 1; Il filtro WHERE lo puoi togliere se vuoi tutte le partite di tutte le giornate. EDIT: puoi provare a togliere "squadre" dall'ultimo FROM, dovrebbe andare lo stesso. EDIT 2: in alternativa puoi fare: SELECT partite.giornata, squadre.nome, (SELECT squadre.nome FROM partite, squadre WHERE squadre.id = partite.fuori) FROM partite, squadre WHERE (squadre.id = partite.casa) AND (partite.giornate = 1)
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 11-09-2006 alle 14:10. |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
per avere qualcosa di più gestibile con PHP ho aggiunto la ridefinizione dei nomi dei campi Codice:
SELECT partite.giornata, ( SELECT squadre.nome FROM squadre WHERE squadre.id = partite.casa ) AS casa, ( SELECT squadre.nome FROM squadre WHERE squadre.id = partite.fuori ) AS fuori FROM partite, squadre WHERE partite.giornata =1
__________________
|
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
@Wisher
Di nulla figurati ![]() Sono un po' arrugginito con SQL, non ricordo bene i criteri di selezione tabelle nel FROM (se ne includi troppe, sprechi parecchia memoria e velocità computazionale, dal momento che il DMBS "tira su" in memoria tabelle inutili, che possono contenere decine di migliaia di tuple).
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
![]()
__________________
|
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Aug 2001
Città: milano, qualunque birreria
Messaggi: 4208
|
Quote:
quindi, usi gli alias invece che il vero nome della tabella per le tue query... anche se non so quale sia la sintassi precisa di tutti i "dialetti" SQL, questa in oracle, mysql, db2 sono sicuro che funge... ![]()
__________________
Save water: drink beer.
This message has been created with 100% recycled electrons Un rutto vale più di mille parole. |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Facci sapere.
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
un'ultima cosa, mi sapreste segnalare qualche link a tutorial/guide su SQL?
__________________
|
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
per il momento nn ho questa grande necessità di impararmi SQL, ormai credo di aver capito le sotto-select e con quelle dovrei andara avanti senza problemi
__________________
|
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jul 2004
Città: Roma
Messaggi: 2094
|
io per il mio fantacalcio e/o campionato l'ho gestita cosi:
select c.giornata, s_c.nome casa, s_f.nome trasferta from calendario, squadre s_c, squadre s_f where c.id_squadra_casa = s_c.id and c.id_squadra_trasferta = s_f.id dove c.giornata è il numero della giornata, puoi anche mettere una order by sulla giornata. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:19.