[SQL] Pb de formulation de requetes
NAIMA
-
NAIMA -
NAIMA -
Bonjour ,
Je n’arrive pas à trouver une solution pour mon problème et J’ai vraiment besoin de votre aide.Avec tous mes remerciements
Voilà mon Problème : J ’ai deux tables TAB_A, TAB_B
La Table TAB_A
Enreg. Champ1 | Champ2 | … …..
Ligne Element_pere1 A …….
Ligne Element_pere1 B …….
Ligne Element_pere1 C …….
Ligne Element_pere1 D …….
Ligne Element_pere1 E …….
Ligne Element_pere1 F …….
Ligne Element_pere1 G …….
Ligne Element_pere1 H …….
…… ……. ………. ……….
Ligne Element_pere2 L …….
Ligne Element_pere2 B …….
Ligne Element_pere2 J …….
Ligne Element_pere2 D …….
Ligne Element_pere2 K …….
Ligne Element_pere2 F …….
Ligne Element_pere2 G …….
Ligne Element_pere2 N …….
…… ……. ………. ……….
Ligne Element_pere3 A …….
Ligne Element_pere3 Q …….
Ligne Element_pere3 R …….
Ligne Element_pere3 O …….
Ligne Element_pere3 E …….
Ligne Element_pere3 F …….
Ligne Element_pere3 G …….
Ligne Element_pere3 H …….
…… ……. ………. ……….
Ligne Element_pere4 A …….
Ligne Element_pere4 S …….
Ligne Element_pere4 C …….
Ligne Element_pere4 D …….
Ligne Element_pere4 T …….
Ligne Element_pere4 F …….
Ligne Element_pere4 W …….
Ligne Element_pere4 H …….
…… ……. ………. ……….
La Table TAB_B
Enreg. Champ1 | Champ2 | … …..
Ligne------- A -----------1 …….
Ligne------- D -----------2 …….
Ligne------- F -----------3 …….
Ligne------- H -----------4 …….
L’objectif de ma requette :
Chercher tous les ELEMENT_PERE de TAB_A qui contiennent toutes les lignes de TAB_B
(c’ est à dire TAB_B est inclus dans L’Element_pere de TAB_A )
dans mon exemple la Requête doit me retourner le résultat SUIVANT :
ELEMENT_Pere1
ELEMENT_Pere4
Parceque c’est 2 Elements inclurent toutes les lignes de table TAB_B
JE VOUS REMERCIE ENORMEMENT
BONNE JOURNNEE A TOUS
Je n’arrive pas à trouver une solution pour mon problème et J’ai vraiment besoin de votre aide.Avec tous mes remerciements
Voilà mon Problème : J ’ai deux tables TAB_A, TAB_B
La Table TAB_A
Enreg. Champ1 | Champ2 | … …..
Ligne Element_pere1 A …….
Ligne Element_pere1 B …….
Ligne Element_pere1 C …….
Ligne Element_pere1 D …….
Ligne Element_pere1 E …….
Ligne Element_pere1 F …….
Ligne Element_pere1 G …….
Ligne Element_pere1 H …….
…… ……. ………. ……….
Ligne Element_pere2 L …….
Ligne Element_pere2 B …….
Ligne Element_pere2 J …….
Ligne Element_pere2 D …….
Ligne Element_pere2 K …….
Ligne Element_pere2 F …….
Ligne Element_pere2 G …….
Ligne Element_pere2 N …….
…… ……. ………. ……….
Ligne Element_pere3 A …….
Ligne Element_pere3 Q …….
Ligne Element_pere3 R …….
Ligne Element_pere3 O …….
Ligne Element_pere3 E …….
Ligne Element_pere3 F …….
Ligne Element_pere3 G …….
Ligne Element_pere3 H …….
…… ……. ………. ……….
Ligne Element_pere4 A …….
Ligne Element_pere4 S …….
Ligne Element_pere4 C …….
Ligne Element_pere4 D …….
Ligne Element_pere4 T …….
Ligne Element_pere4 F …….
Ligne Element_pere4 W …….
Ligne Element_pere4 H …….
…… ……. ………. ……….
La Table TAB_B
Enreg. Champ1 | Champ2 | … …..
Ligne------- A -----------1 …….
Ligne------- D -----------2 …….
Ligne------- F -----------3 …….
Ligne------- H -----------4 …….
L’objectif de ma requette :
Chercher tous les ELEMENT_PERE de TAB_A qui contiennent toutes les lignes de TAB_B
(c’ est à dire TAB_B est inclus dans L’Element_pere de TAB_A )
dans mon exemple la Requête doit me retourner le résultat SUIVANT :
ELEMENT_Pere1
ELEMENT_Pere4
Parceque c’est 2 Elements inclurent toutes les lignes de table TAB_B
JE VOUS REMERCIE ENORMEMENT
BONNE JOURNNEE A TOUS
A voir également:
- [SQL] Pb de formulation de requetes
- Logiciel sql - Télécharger - Bases de données
- Formule de math - Télécharger - Études & Formations
- Formules excel de base - Guide
- Blob sql ✓ - Forum Webmastering
- Formule de politesse mail anglais - Guide
2 réponses
alors là, franchement, je comprends pas...
Tu as une relation un à plusieurs entre Tab_B et Tab_A? ou l'inverse (comme le laisserait penser l'appellation "champ_père)?
Que veut dire "c’est 2 Elements inclurent toutes les lignes de table TAB_B"?
D'après ton exemple on devrait pouvoir écrire:
SELECT TAB_A.* FROM TAB_A Where Champ2="A";
Si tu pouvais réexpliquer, ce serait peut-être plus clair...
Tu as une relation un à plusieurs entre Tab_B et Tab_A? ou l'inverse (comme le laisserait penser l'appellation "champ_père)?
Que veut dire "c’est 2 Elements inclurent toutes les lignes de table TAB_B"?
D'après ton exemple on devrait pouvoir écrire:
SELECT TAB_A.* FROM TAB_A Where Champ2="A";
Si tu pouvais réexpliquer, ce serait peut-être plus clair...
C'est pour un exercice, j'imagine.
Avec la structure actuelle, je ne pense pas pouvoir t'aider. Je ne vois pas comment formuler l'expression WHERE: un même enregistrement ne peut pas contenir toutes les données.
En revanche, en fractionnant les tables:
On crée une table "pages" dont les enregistrements sont liés par une relation un à plusieurs à une table "lignes"
J'ai une astuce :
SELECT Count(T_Pages.N°Page) AS CompteDeN°Page, T_Lignes.Ligne
FROM T_Pages INNER JOIN T_Lignes ON T_Pages.N°P = T_Lignes.N°P
GROUP BY T_Lignes.Ligne
HAVING (((Count(T_Pages.N°Page))=3) AND ((T_Lignes.Ligne)="12" Or (T_Lignes.Ligne)="13" Or (T_Lignes.Ligne)="14"));
Le Count fait appel au nombre des critères recherchés.
A priori, je ne vois pas d'autre solution mais je ne suis pas un pro...
Avec la structure actuelle, je ne pense pas pouvoir t'aider. Je ne vois pas comment formuler l'expression WHERE: un même enregistrement ne peut pas contenir toutes les données.
En revanche, en fractionnant les tables:
On crée une table "pages" dont les enregistrements sont liés par une relation un à plusieurs à une table "lignes"
J'ai une astuce :
SELECT Count(T_Pages.N°Page) AS CompteDeN°Page, T_Lignes.Ligne
FROM T_Pages INNER JOIN T_Lignes ON T_Pages.N°P = T_Lignes.N°P
GROUP BY T_Lignes.Ligne
HAVING (((Count(T_Pages.N°Page))=3) AND ((T_Lignes.Ligne)="12" Or (T_Lignes.Ligne)="13" Or (T_Lignes.Ligne)="14"));
Le Count fait appel au nombre des critères recherchés.
A priori, je ne vois pas d'autre solution mais je ne suis pas un pro...
Merci "Zenon" pour la solution , vous m'avez donné une idée
j'ai fais la requette suivante :
SELECT N°Page,count(*) FROM tab_A, tab_B
where tab_A.N°LIGNE = tab_B.N°LIGNE
and .....
HAVING count(*) = (SELECT count(*) from tab_B)
GROUP by N°Page
est ça marche, le seul problème , il prends plus de temps...
Merci Beaucoup
j'ai fais la requette suivante :
SELECT N°Page,count(*) FROM tab_A, tab_B
where tab_A.N°LIGNE = tab_B.N°LIGNE
and .....
HAVING count(*) = (SELECT count(*) from tab_B)
GROUP by N°Page
est ça marche, le seul problème , il prends plus de temps...
Merci Beaucoup
Voila , je vais m'expliquer autrement:
j'ai par exemple un JOURNAL de 10 pages chaque page contient plusieurs lignes ) et je dois trouver les pages qui contiennent 4 lignes biens detérminées "Ligne10,ligne12,ligne20,ligne24" , si une ligne manque ds une page alors cette dernière ne dois pas être selectionée...
dans ce cas la TAB_A est représenté comme suit
pag1----- ligne1
pag1----- ligne2
-
pag1----- ligne10
-
pag1----- ligne24
pag1----- ligne25
pag1----- ligne26
.
.
pag2----- ligne1
.
pag2----- ligne10
pag2----- ligne11
pag2----- ligne12
-
pag2----- ligne24
pag2----- ligne25
pag2----- ligne26
.
.
LA TAB_B doit contenir les 4 ligne
Ligne 10
Ligne 12
Ligne 20
Ligne 24
Dans mon objectif : le resultat sera seulement la page 2 parceque
elle contient les 4 lignes de la tab_B.
///////////////////////////////////////////////
Objectif; chercher les pages de la tab_A qui inclus toutes les ligne de la tab_B
Voila; merci d'avance