Sous-requete dans la clause Select
Stagiaire WDF
Inscrit:
23/05/2005 17:38
Post(s): 10
1- Est-t-il possible d'inclure des sous-requetes dans la clause SELECT (j'utilise HF)?

2-Je n'arrive pas à determiner le nombre d'enregistrements dans le résultat d'une requête avec la commande
HNbEnr() si cette requête n'est pas enregistrée en tant que requête faisant partie du projet, or la plupart de mes requêtes sont utilisable une seule fois et je trouve vraiment très incomfortable le fait de bourrer l'application avec des requêtes qui ne seront utilisées qu'une seule fois.

Merci

Contribution le : 23/05/2005 17:48
Créer un fichier PDF de la contribution Imprimer


Re: Sous-requete dans la clause Select
Animateur WDF
Inscrit:
22/11/2004 11:23
Post(s): 255
Les sous requêtes sont acceptées dans HF

Un petit exemple de code

MaSource est une source de données
req est une chaine

req = "SELECT * FROM T_Client WHERE idClient IN (SELECT idClient FROM T_Commande WHERE impaye = 1)"

SI PAS HExecuteRequeteSQL(MaSource,HRequeteDefaut,req) ALORS
  Erreur(HErreurInfo(errmessage))
SINON
  SI HNbEnr(MaSource) > 0 ALORS
    Info("Il y a au moins un enregistrement")
    //---On lit le premier enregistrement
    HLitPremier(Masource)

    //---Ensuite parcourt de "MaSource" comme si c'était un fichier HF
  SINON
    Info("Il n'y a pas d'enregistrement dans la source")
  FIN
FIN

HAnnuleDeclaration(MaSource)



Voilà un petit code qui répond à tes deux questions ;)


Contribution le : 24/05/2005 08:28
Créer un fichier PDF de la contribution Imprimer


Re: Sous-requete dans la clause Select
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bonjour

1 oui cela est possible et depuis fort longtemps en fait (mais sur des requetes simples).
Par exemple en 7.0 nous utilisons une requete de ce type :
SELECT DISTINCT FIC1.F1_Rub1 
	FROM  FIC1, FIC2 
	WHERE FIC1.F1_CLE1 = FIC2.F2_CLE1
	AND FIC2.F2_RUB2 = {Param1}
	AND FIC2.F2_RUB3 = '1'
	AND FIC1.F1_RUB1 NOT IN (
		SELECT FIC3.F3_RUB1 FROM FIC3 
		WHERE  FIC3.F3_CLE3 = {Param1}
	)


Noter que dans notre exemple, il s'agit d'une requete WDR dont le code a été saisie à la main.

2- Une solution avoir le nombre de ligne d'une requête serait de lancer une autre requête mais avec une clause COUNT(). Mais HNnEnr passe quand on a effectuée la lecture du premier enregistrement de la requete SELECT (ne passe pas avec les requêtes UPDATE) si on n'a pas utilisé l'option hAvecFiltre.

Contribution le : 24/05/2005 08:31
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Sous-requete dans la clause Select
Anonyme
Je ne me suis pas très bien expliqué pour la première question je donne un petit exemple:

Select id, (select cod_id from ...), ..., ... from AutreTables

Parce que les exemples que vous m'aviez cité sont au niveau de la clause From alors que mon besoin est au niveau de la clause Select.
J'ai toujours eu un message d'erreur en essayant de faire ceci

Contribution le : 24/05/2005 13:33
Créer un fichier PDF de la contribution Imprimer


Re: Sous-requete dans la clause Select
Stagiaire WDF
Inscrit:
26/05/2005 12:21
Post(s): 21
Bonjour

1 - Une sous-requête est une requête dont le résultat est utilisé par une autre requête.

Par exemple, vous voulez sélectionner les commandes dont le montant est supérieur au montant moyen des commandes. Le montant moyen des commandes n'est pas connu directement. Ce montant moyen va être retourné par une autre requête (appelée ici sous-requête).

Une sous-requête peut être utilisée :
- soit en tant que condition de sélection.
- soit en tant que fichier de la requête principale.

SELECT NumCommande 
FROM COMMANDE 
WHERE Montant (SELECT AVG(Montant) 
FROM COMMANDE) 

// ou Une sous-requête peut être utilisée en tant que fichier de la requête principale

SELECT Rubrique1 [, Rubrique2] 
FROM (SELECT Rubrique1 FROM Fichier1 [WHERE ...]) 
 


2 - Les requêtes composées permettent de combiner des requêtes de sélection (instruction SELECT). Chaque requête de sélection doit porter sur des fichiers de structure identique.

Pour réaliser une requête composée, il est possible d'utiliser :

l'opérateur UNION.

l'opérateur UNION ALL.

Exemple : Réaliser une requête contenant les clients dont le nom commence par la lettre 'A' et les prospects habitant Nice. Pour réaliser cette requête, il est nécessaire de combiner les deux requêtes suivantes :

sélection des clients dont le nom commence par la lettre 'A'.

sélection des prospects habitant Nice.

Les enregistrements communs aux deux fichiers peuvent :

soit apparaître une seule fois dans le résultat de la requête (opérateur UNION).

soit apparaître deux fois dans le résultat de la requête (opérateur UNION ALL).

SELECT NomClient 
FROM CLIENT 
WHERE NomClient LIKE 'A%' 
UNION 
SELECT NomProspect 
FROM PROSPECT 
WHERE VilleClient = 'Nice'

// ou

SELECT NomClient 
FROM CLIENT 
WHERE NomClient LIKE 'A%' 
UNION ALL 
SELECT NomProspect 
FROM PROSPECT 
WHERE VilleClient = 'Nice'  



Contribution le : 26/05/2005 14:56
_________________
//**//
Créer un fichier PDF de la contribution Imprimer


Re: Sous-requete dans la clause Select
Stagiaire WDF
Inscrit:
23/05/2005 17:38
Post(s): 10
Je ne sais pas si on a saisi mon problème ou non, je vais le détailler au plus possible:
J'ai une table Client qui comporte id_client, nom, numéroTél
une autre table Contacts qui comporte la liaison entre les clients (les clients se passent entre eux des coups de fil par exemple), la table comporte id_liaison, id_client_appelant, id_client_appelé, duréeCommunication.
J'ai deux maquettes, l'une qui affiche les clients, sa requête est simple:
Select * From Client
Le résultat sera affiché directement dans le premier tableau.
Le problème se situe au niveau du deuxième tableau, ou j'aurais a faire:
Select id_liaison, (select nom from client where id_client=id_client_appelant), (select nom from client where id_client=id_client_appelé), duréeCommunication from contacts

Cette requête est utilisable sous Access (ou Oracle), que faire pour qu'elle fonctionne avec HF???

J'espère que j'ai assez bien expliqué mon besoin

Contribution le : 27/05/2005 16:28
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2