Nous souhaitons récupérer la ville de naissance de chaque acteur. La liste des acteurs est stockée dans la table ACTORS et la liste des villes dans la table CITIES. Pour exécuter cette requête nous devons effectuer une jointure sur deux tables : ACTORS et CITIES.
Voici le code 4D correspondant à cette requête :
ARRAY LONGINT(aSoldTickets;0)
ARRAY TEXT(aTitles;0)
ARRAY TEXT(aDirectors;0)
C_LONGINT($i;$vInd)
$vInd:=0
ALL RECORDS([ACTORS])
For($i;1;Records in selection([ACTORS]))
$vInd:=$vInd+1
INSERT IN ARRAY(aTitles;$vInd;1)
aTitles{$vInd}:=[ACTORS]FirstName+" "+[ACTORS]LastName
RELATE ONE([ACTORS]Birth_City_ID)
INSERT IN ARRAY(aDirectors;$vInd;1)
aDirectors{$vInd}:=[CITIES]City_Name
NEXT RECORD([ACTORS])
End for
ARRAY INTEGER(aMovieYear;Taille tableau(aTitles))
ARRAY TEXT(aMedias;Taille tableau(aTitles))
ARRAY LONGINT(aSoldTickets;Taille tableau(aTitles))
ARRAY LONGINT(aNrActors;Taille tableau(aTitles))
MULTI SORT ARRAY(aDirectors;>;aTitles;>;aMovieYear;aMedias;aSoldTickets;aNrActors)
- En utilisant du code SQL :
ARRAY TEXT(aTitles;0)
ARRAY TEXT(aDirectors;0)
Begin SQL
SELECT CONCAT(CONCAT(ACTORS.FirstName,' '),ACTORS.LastName), CITIES.City_Name
FROM ACTORS, CITIES
WHERE ACTORS.Birth_City_ID=CITIES.City_ID
ORDER BY 2,1
INTO :aTitles, :aDirectors;
End SQL
ARRAY INTEGER(aMovieYear;Taille tableau(aTitles))
ARRAY TEXT(aMedias;Taille tableau(aTitles))
ARRAY LONGINT(aSoldTickets;Taille tableau(aTitles))
ARRAY LONGINT(aNrActors;Taille tableau(aTitles))
- En utilisant les commandes SQL génériques :
ARRAY TEXT(aTitles;0)
ARRAY TEXT(aDirectors;0)
C_TEXT($tQueryTxt)
SQL LOGIN(SQL_INTERNAL;"";"")
$tQueryTxt:=""
$tQueryTxt:=$tQueryTxt+"SELECT CONCAT(CONCAT(ACTORS.FirstName,' '),ACTORS.LastName), CITIES.City_Name"
$tQueryTxt:=$tQueryTxt+" FROM ACTORS, CITIES"
$tQueryTxt:=$tQueryTxt+" WHERE ACTORS.Birth_City_ID=CITIES.City_ID"
$tQueryTxt:=$tQueryTxt+" ORDER BY 2,1"
SQL EXECUTE($tQueryTxt;aTitles;aDirectors)
SQL LOAD RECORD(SQL all records)
SQL LOGOUT
ARRAY INTEGER(aMovieYear;Taille tableau(aTitles))
ARRAY TEXT(aMedias;Taille tableau(aTitles))
ARRAY LONGINT(aSoldTickets;Taille tableau(aTitles))
ARRAY LONGINT(aNrActors;Taille tableau(aTitles))
- Il n'est pas possible d'utiliser CHERCHER PAR SQL dans ce contexte car cette commande ne peut pas recevoir plus d'une table en paramètre.
- En utilisant la commande SQL dynamique EXECUTE IMMEDIATE :
ARRAY TEXT(aTitles;0)
ARRAY TEXT(aDirectors;0)
C_TEXT($tQueryTxt)
$tQueryTxt:=""
$tQueryTxt:=$tQueryTxt+"SELECT CONCAT(CONCAT(ACTORS.FirstName,' '),ACTORS.LastName), CITIES.City_Name"
$tQueryTxt:=$tQueryTxt+" FROM ACTORS, CITIES"
$tQueryTxt:=$tQueryTxt+" WHERE ACTORS.Birth_City_ID=CITIES.City_ID"
$tQueryTxt:=$tQueryTxt+" ORDER BY 2,1"
$tQueryTxt:=$tQueryTxt+" INTO :aTitles, :aDirectors"
Begin SQL
EXECUTE IMMEDIATE :$tQueryTxt;
End SQL
ARRAY INTEGER(aMovieYear;Taille tableau(aTitles))
ARRAY TEXT(aMedias;Taille tableau(aTitles))
ARRAY LONGINT(aSoldTickets;Taille tableau(aTitles))
ARRAY LONGINT(aNrActors;Taille tableau(aTitles))
Pour tester ces exemples, lancez la base "4D SQL Code Samples" et affichez la boîte de dialogue principale. Choisissez le mode d'interrogation du moteur de 4D et cliquez sur le bouton Jointures.