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
ho fatto la do manda a chatgpt, ecco la risposta (non controllata):
B4X:
SELECT Aereo.TipoAereo
FROM Aereo
JOIN Volo ON Aereo.IDAerEO = Volo.IDAerEO
WHERE Volo.CodiceArPartenza = 'TRN';
B4X:
SELECT AeroportoPartenza.Nazione AS NazionePartenza, AeroportoArrivo.Nazione AS NazioneArrivo
FROM Aeroporto AS AeroportoPartenza
JOIN (
SELECT CodiceArPartenza, CodiceArArrivo
FROM Volo
WHERE CodiceVolo = 'AZ298'
) AS VoloInfo
ON VoloInfo.CodiceArPartenza = AeroportoPartenza.CodiceAr
JOIN Aeroporto AS AeroportoArrivo
ON VoloInfo.CodiceArArrivo = AeroportoArrivo.CodiceAr;
Usare un tool che consenta di generare query in maniera grafica, ovvero trascinando tabelle-campi, partendo dalla struttura relazionale.
Per SQLite non ne conosco (e tra poco mi "divertirò" a cercarne, ma mi sembra di averlo già fatto in passato, senza successo).
Al limite fallo con MS Access
Se, invece, la domanda fosse: "come devono essere le query?"... te lo direi successivamente ?
WITH VoloInfo AS (
SELECT CodiceArPartenza, CodiceArArrivo
FROM Volo
WHERE CodiceVolo = 'AZ298'
),
AeroportoPartenza AS (
SELECT CodiceAr, Nazione
FROM Aeroporto
WHERE CodiceAr = (SELECT CodiceArPartenza FROM VoloInfo)
),
AeroportoArrivo AS (
SELECT CodiceAr, Nazione
FROM Aeroporto
WHERE CodiceAr = (SELECT CodiceArArrivo FROM VoloInfo)
)
SELECT (SELECT Nazione FROM AeroportoPartenza) AS NazionePartenza,
(SELECT Nazione FROM AeroportoArrivo) AS NazioneArrivo,
(SELECT TipoAereo FROM Aereo JOIN Volo ON Aereo.IDAerEO = Volo.IDAerEO WHERE Volo.CodiceArPartenza = 'TRN') AS TipoAereoUsatoPerVoliDaTorino
WITH VoloInfo AS (
SELECT CodiceArPartenza, CodiceArArrivo
FROM Volo
WHERE CodiceVolo = 'AZ298'
),
AeroportoPartenza AS (
SELECT CodiceAr, Nazione
FROM Aeroporto
WHERE CodiceAr = (SELECT CodiceArPartenza FROM VoloInfo)
),
AeroportoArrivo AS (
SELECT CodiceAr, Nazione
FROM Aeroporto
WHERE CodiceAr = (SELECT CodiceArArrivo FROM VoloInfo)
)
SELECT (SELECT Nazione FROM AeroportoPartenza) AS NazionePartenza,
(SELECT Nazione FROM AeroportoArrivo) AS NazioneArrivo,
(SELECT TipoAereo FROM Aereo JOIN Volo ON Aereo.IDAerEO = Volo.IDAerEO WHERE Volo.CodiceArPartenza = 'TRN') AS TipoAereoUsatoPerVoliDaTorino
diciamo mi sembra un po troppo complessa, ma io non ho ilcodice aeroporto ho la citta nel caso specifico torino, quindi devo ricavare anche il codice TRN
Se non hai il codice aeroporto, ma solo la città di partenza, è necessario unirsi alla tabella "Aeroporto" per ottenere il codice aeroporto corrispondente. Ecco una query che fa questo:
B4X:
WITH VoloInfo AS (
SELECT CodiceArPartenza, CodiceArArrivo
FROM Volo
WHERE CodiceVolo = 'AZ298'
),
AeroportoPartenza AS (
SELECT CodiceAr, Nazione
FROM Aeroporto
WHERE Citta = 'TORINO'
),
AeroportoArrivo AS (
SELECT CodiceAr, Nazione
FROM Aeroporto
WHERE CodiceAr = (SELECT CodiceArArrivo FROM VoloInfo)
)
SELECT (SELECT Nazione FROM AeroportoPartenza) AS NazionePartenza,
(SELECT Nazione FROM AeroportoArrivo) AS NazioneArrivo,
(SELECT TipoAereo FROM Aereo JOIN Volo ON Aereo.IDAerEO = Volo.IDAerEO WHERE Volo.CodiceArPartenza = (SELECT CodiceAr FROM AeroportoPartenza)) AS TipoAereoUsatoPerVoliDaTorino
SELECT Aereo.TipoAereo, Volo.CodicePartenza
FROM Aeroporto INNER JOIN (Aereo INNER JOIN Volo ON Aereo.IDAereo = Volo.IDAereo) ON Aeroporto.CodiceAr = Volo.CodicePartenza
WHERE (((Volo.CodicePartenza)="TRN"));
(Non ho controllato se vada bene; devo ancora fare colazione . NOTA: non ho scritto io la query; ho impostato le relazioni tra le tabelle e messo il criterio "TRN")
Sì, questa query risponde alla domanda iniziale "i tipi di aereo usati nei voli che partono da Torino".
L'unione tra le tabelle "Aeroporto", "Aereo" e "Volo" consente di ottenere tutte le informazioni richieste. Il filtro sulla colonna "CodicePartenza" impostato su "TRN" garantisce che vengano restituiti solo i voli che partono da Torino.
Tuttavia, questa query non risponde alla seconda parte della domanda "le nazioni da cui parte e arriva il volo AZ298". Per ottenere queste informazioni, è necessario un'altra query.
SELECT Aereo.TipoAereo, Volo.CodicePartenza
FROM Aeroporto INNER JOIN (Aereo INNER JOIN Volo ON Aereo.IDAereo = Volo.IDAereo) ON Aeroporto.CodiceAr = Volo.CodicePartenza
WHERE (((Volo.CodicePartenza)="TRN"));
(Non ho controllato se vada bene; devo ancora fare colazione . NOTA: non ho scritto io la query; ho impostato le relazioni tra le tabelle e messo il criterio "TRN")
questa mi sembra piu sempice come soluzione, solo che bisogna integrare un'altra tabella ,
visto che ho il nome dell'aeroporto e non il codice, quindi anche il TRN deve essere ricavato dalla query.
Sì, questa query risponde alla domanda iniziale "i tipi di aereo usati nei voli che partono da Torino".
L'unione tra le tabelle "Aeroporto", "Aereo" e "Volo" consente di ottenere tutte le informazioni richieste. Il filtro sulla colonna "CodicePartenza" impostato su "TRN" garantisce che vengano restituiti solo i voli che partono da Torino.
Tuttavia, questa query non risponde alla seconda parte della domanda "le nazioni da cui parte e arriva il volo AZ298". Per ottenere queste informazioni, è necessario un'altra query.
Sì, questa query risponde alla domanda iniziale "i tipi di aereo usati nei voli che partono da Torino".
L'unione tra le tabelle "Aeroporto", "Aereo" e "Volo" consente di ottenere tutte le informazioni richieste. Il filtro sulla colonna "CodicePartenza" impostato su "TRN" garantisce che vengano restituiti solo i voli che partono da Torino.
Tuttavia, questa query non risponde alla seconda parte della domanda "le nazioni da cui parte e arriva il volo AZ298". Per ottenere queste informazioni, è necessario un'altra query.