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 :
TABLEAU ENTIER LONG(aSoldTickets;0)
TABLEAU TEXTE(aTitles;0)
TABLEAU TEXTE(aDirectors;0)
C_ENTIER LONG($i;$vInd)
$vInd:=0
TOUT SELECTIONNER([ACTORS])
Boucle($i;1;Enregistrements trouves([ACTORS]))
$vInd:=$vInd+1
INSERER DANS TABLEAU(aTitles;$vInd;1)
aTitles{$vInd}:=[ACTORS]FirstName+" "+[ACTORS]LastName
CHARGER SUR LIEN([ACTORS]Birth_City_ID)
INSERER DANS TABLEAU(aDirectors;$vInd;1)
aDirectors{$vInd}:=[CITIES]City_Name
ENREGISTREMENT SUIVANT([ACTORS])
Fin de boucle
TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
TABLEAU ENTIER LONG(aSoldTickets;Taille tableau(aTitles))
TABLEAU ENTIER LONG(aNrActors;Taille tableau(aTitles))
TABLEAU MULTI TRI(aDirectors;>;aTitles;>;aMovieYear;aMedias;aSoldTickets;aNrActors)
- En utilisant du code SQL :
TABLEAU TEXTE(aTitles;0)
TABLEAU TEXTE(aDirectors;0)
Debut 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;
Fin SQL
TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
TABLEAU ENTIER LONG(aSoldTickets;Taille tableau(aTitles))
TABLEAU ENTIER LONG(aNrActors;Taille tableau(aTitles))
- En utilisant les commandes SQL génériques :
TABLEAU TEXTE(aTitles;0)
TABLEAU TEXTE(aDirectors;0)
C_TEXTE($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 EXECUTER($tQueryTxt;aTitles;aDirectors)
SQL CHARGER ENREGISTREMENT(SQL tous les enregistrements)
SQL LOGOUT
TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
TABLEAU ENTIER LONG(aSoldTickets;Taille tableau(aTitles))
TABLEAU ENTIER LONG(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 :
TABLEAU TEXTE(aTitles;0)
TABLEAU TEXTE(aDirectors;0)
C_TEXTE($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"
Debut SQL
EXECUTE IMMEDIATE :$tQueryTxt;
Fin SQL
TABLEAU ENTIER(aMovieYear;Taille tableau(aTitles))
TABLEAU TEXTE(aMedias;Taille tableau(aTitles))
TABLEAU ENTIER LONG(aSoldTickets;Taille tableau(aTitles))
TABLEAU ENTIER LONG(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.