Italian [risolto] solved help Creazione di 2 " semplici " query

amorosik

Expert
Licensed User
buongiorno ragazzi,
mi serve estrarre dei dati da 3 tabelle ,
quale migliore query posso utilizzare?

ho queste 3 tabelle
TABELLA Aeroporto
CodiceAr Citta Nazione
CAL CAGLIARI ITALIA
FCO ROMA FIUMICINO ITALIA
CTA CATANIA ITALIA
MPX MILANO MALPENSA ITALIA
TRN TORINO ITALIA
PAR PARIGI FRANCIA


TABELA VOLO
IDVOLO CODICEVOLO CODICEARPARTENZA CODICEARARRIVO IDAEREO
1 AZ297 CTA FCO 1
2 AZ273 TRN CTA 2
3 AZ285 MPX PAR 3
4 AZ296 TRN FCO 4
5 AZ298 FCO PAR 5


TABELLA AEREO
IDAEREO TIPOAEREO
1 BOING
2 AIRBUS
3 AEREOX
4 AEREOY
5 AEREOX

il quesito che mi serve e'
1) i tipi di aereo usati nei voli che partono da torino

2) le nazioni da cui parte e arriva il volo AZ298


qualcuno mi puo' indicare per favore come creare queste due query in maniera ottimale?
Grazie e buona domenica

Parte tutto dalla tabella VOLO, le altre due sono roba collegata
Dovrebbero essere sufficienti queste:

SELECT AEREO.TipoAereo
FROM (VOLO LEFT JOIN AEREO ON VOLO.IDaereo = AEREO.IDaereo) LEFT JOIN AEROPORTO ON VOLO.CODICEPARTENZA = AEROPORTO.CodiceAR
WHERE AEROPORTO.Citta="TORINO"

SELECT AEROPORTO.nazione
FROM (VOLO LEFT JOIN AEREO ON VOLO.IDaereo = AEREO.IDaereo) LEFT JOIN AEROPORTO ON VOLO.CODICEPARTENZA = AEROPORTO.CodiceAR
WHERE VOLO.CODICEPARTENZA='AZ298' or VOLO.CODICEARRIVO='AZ298'
 

LucaMs

Expert
Licensed User
Longtime User
Senza JOIN

SELECT Volo.CodiceVolo, Aeroporto.Nazione
FROM Volo, Aeroporto
WHERE ((Volo.CodiceVolo)="AZ298" AND (Volo.CodicePartenza = Aeroporto.CodiceAr))
OR ((Volo.CodiceVolo)="AZ298" AND (Volo.CodiceArrivo = Aeroporto.CodiceAr))

1676197045467.png


(Primo record = Partenza, secondo Arrivo)
 

Xfood

Expert
Licensed User
Senza JOIN

SELECT Volo.CodiceVolo, Aeroporto.Nazione
FROM Volo, Aeroporto
WHERE ((Volo.CodiceVolo)="AZ298" AND (Volo.CodicePartenza = Aeroporto.CodiceAr))
OR ((Volo.CodiceVolo)="AZ298" AND (Volo.CodiceArrivo = Aeroporto.CodiceAr))

View attachment 139199

(Primo record = Partenza, secondo Arrivo)
ottimo, ma servirebbe una sola riga con scritto
codicevolo Partenza arrivo
AZ298 ITALIA FRANCIA
 

Xfood

Expert
Licensed User
la prima query l'ho modificata cosi
e sembra essere corretta
SELECT Aereo.TipoAereo, Aeroporto.Citta FROM Aeroporto INNER JOIN (Aereo INNER JOIN Volo ON Aereo.IDAereo = Volo.IDAereo) ON Aeroporto.CodiceAr = Volo.CodicePartenza WHERE (((Volo.CodicePartenza)=(SELECT CODICEAR FROM AEROPORTO WHERE CITTA="TORINO")))
 

Xfood

Expert
Licensed User
Parte tutto dalla tabella VOLO, le altre due sono roba collegata
Dovrebbero essere sufficienti queste:

SELECT AEREO.TipoAereo
FROM (VOLO LEFT JOIN AEREO ON VOLO.IDaereo = AEREO.IDaereo) LEFT JOIN AEROPORTO ON VOLO.CODICEPARTENZA = AEROPORTO.CodiceAR
WHERE AEROPORTO.Citta="TORINO"
la prima query mi sembra ok, e anche molto ottimizzata,
la seconda non mi restituisce nulla
 

LucaMs

Expert
Licensed User
Longtime User
Io ho scaricato uno di quei tool "query builder" per SQLite. Adesso, però... ho un po' di fifa ad installarlo 😁 (vedi i ransom che girano).
Anche perché già il nome dell'exe è strano, sqlquerytool-x64.exe; perché 'sto nome, visto che il tool pare si chiami FlySpeed SQL Query?

Vediamo se trovo un sito che analizzi il file...
 

Xfood

Expert
Licensed User
Io ho scaricato uno di quei tool "query builder" per SQLite. Adesso, però... ho un po' di fifa ad installarlo 😁 (vedi i ransom che girano).
Anche perché già il nome dell'exe è strano, sqlquerytool-x64.exe; perché 'sto nome, visto che il tool pare si chiami FlySpeed SQL Query?

Vediamo se trovo un sito che analizzi il file...
GRAZIE ,
la prima query e' risolta, la seconda servirebbe mettere tutto su unica riga, ed e' fatta...
 

Xfood

Expert
Licensed User
E' un esercizio di sql, in cui vogliono il risultato della query su unica riga con volo, citta di partenza, citta di arrivo

😭😭😭😭
 

LucaMs

Expert
Licensed User
Longtime User
SELECT Volo.CodiceVolo, Aeroporto.Nazione, Aeroporto_1.Nazione
FROM (Volo INNER JOIN Aeroporto ON Volo.CodicePartenza = Aeroporto.CodiceAr) INNER JOIN Aeroporto AS Aeroporto_1 ON Volo.CodiceArrivo = Aeroporto_1.CodiceAr
WHERE (((Volo.CodiceVolo)="AZ298"));
 

LucaMs

Expert
Licensed User
Longtime User
Visto che è un compito a casa 😁, meglio così:


SELECT Volo.CodiceVolo, Aeroporto.Nazione AS Partenza, Aeroporto_1.Nazione As Arrivo
FROM (Volo INNER JOIN Aeroporto ON Volo.CodicePartenza = Aeroporto.CodiceAr) INNER JOIN Aeroporto AS Aeroporto_1 ON Volo.CodiceArrivo = Aeroporto_1.CodiceAr
WHERE (((Volo.CodiceVolo)="AZ298"));

1676201260929.png


(ho aggiunto solo un nuovo nome in modo da visualizzare "Partenza" e "Arrivo" - che nel codice di lettura del record, però, saranno anche i nomi dei due campi).
 

amorosik

Expert
Licensed User
la prima query mi sembra ok, e anche molto ottimizzata,
la seconda non mi restituisce nulla

Sicuramente avrai notato che i nomi dei campi miei non sono identici ai campi tuoi
Quindi, se copy la query che io ho scritto, e' normale che non visualizzi niente
Anzi dovrebbe dirti che i campi VOLO.CODICEPARTENZA e VOLO.CODICEARRIVO sul tuo db non esistono
 

Xfood

Expert
Licensed User
Sicuramente avrai notato che i nomi dei campi miei non sono identici ai campi tuoi
Quindi, se copy la query che io ho scritto, e' normale che non visualizzi niente
Anzi dovrebbe dirti che i campi VOLO.CODICEPARTENZA e VOLO.CODICEARRIVO sul tuo db non esistono
Si verificato, e corretto, ma non estrae nulla lo stesso... parlo della seconda query
 

amorosik

Expert
Licensed User
Si verificato, e corretto, ma non estrae nulla lo stesso... parlo della seconda query

Se questa sotto ti da qualche riga, allora anche la query2 dovrebbe restituire roba

SELECT * FROM VOLO WHERE CODICEPARTENZA='AZ298' or CODICEARRIVO='AZ298'
 

Xfood

Expert
Licensed User
Se questa sotto ti da qualche riga, allora anche la query2 dovrebbe restituire roba

SELECT * FROM VOLO WHERE CODICEPARTENZA='AZ298' or CODICEARRIVO='AZ298'
Adesso è piu chiaro, non da nulla perche il codice AZ298 si riferisce al codice volo
Il codicepartenza e codicearrivo si riferisce al codiceaeroporto per cui in quei campi trovero per esempio CTA FCO TRN ECC. il codice dell'aeroporto di partenza e di arrivo, ecco perche e' sbagliata questa tua query
 

amorosik

Expert
Licensed User
Adesso è piu chiaro, non da nulla perche il codice AZ298 si riferisce al codice volo
Il codicepartenza e codicearrivo si riferisce al codiceaeroporto per cui in quei campi trovero per esempio CTA FCO TRN ECC. il codice dell'aeroporto di partenza e di arrivo, ecco perche e' sbagliata questa tua query

Eh gia', ma chi e' che l'ha scritta? Mahhh
Comunque la giusta query2 dovrebbe essere ovviamente questa:

SELECT VOLO.CODICEVOLO, AEROPORTO.nazione AS PARTENZA, AEROPORTO_1.nazione AS ARRIVO
FROM (VOLO LEFT JOIN AEROPORTO ON VOLO.CODICEPARTENZA = AEROPORTO.CodiceAR) LEFT JOIN AEROPORTO AS AEROPORTO_1 ON VOLO.CODICEARRIVO = AEROPORTO_1.CodiceAR
WHERE VOLO.CODICEVOLO='AZ298'
 

Xfood

Expert
Licensed User
ottimo ragazzi, grazie, le query sono ok
grazie mille a tutti
e sopratutto a @LucaMs , @amorosik ,@Lello1964

la prima query che ho adottato peril quesito e':
SELECT AEREO.TipoAereo
FROM (VOLO LEFT JOIN AEREO ON VOLO.IDaereo = AEREO.IDaereo) LEFT JOIN AEROPORTO ON VOLO.CODICEPARTENZA = AEROPORTO.CodiceAR
WHERE AEROPORTO.Citta="TORINO"
@amorosik



la seconda e quella di quella di @LucaMs
SELECT Volo.CodiceVolo, Aeroporto.Nazione AS Partenza, Aeroporto_1.Nazione As Arrivo
FROM (Volo INNER JOIN Aeroporto ON Volo.CodicePartenza = Aeroporto.CodiceAr) INNER JOIN Aeroporto AS Aeroporto_1 ON Volo.CodiceArrivo = Aeroporto_1.CodiceAr
WHERE (((Volo.CodiceVolo)="AZ298"))
 

amorosik

Expert
Licensed User
ottimo ragazzi, grazie, le query sono ok
grazie mille a tutti
e sopratutto a @LucaMs , @amorosik ,@Lello1964

la prima query che ho adottato peril quesito e':
SELECT AEREO.TipoAereo
FROM (VOLO LEFT JOIN AEREO ON VOLO.IDaereo = AEREO.IDaereo) LEFT JOIN AEROPORTO ON VOLO.CODICEPARTENZA = AEROPORTO.CodiceAR
WHERE AEROPORTO.Citta="TORINO"
@amorosik



la seconda e quella di quella di @LucaMs
SELECT Volo.CodiceVolo, Aeroporto.Nazione AS Partenza, Aeroporto_1.Nazione As Arrivo
FROM (Volo INNER JOIN Aeroporto ON Volo.CodicePartenza = Aeroporto.CodiceAr) INNER JOIN Aeroporto AS Aeroporto_1 ON Volo.CodiceArrivo = Aeroporto_1.CodiceAr
WHERE (((Volo.CodiceVolo)="AZ298"))


Somiglia alla mia
Solo che la mia e' meglio 🤣
 
Top