Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2011, 12h08   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 117
Points : 14
Points : 14
Envoyer un message via MSN à jam92400
Par défaut Comment faire ma requête SQL

Bonjour

J'ai un petit soucis, je galère à écrire une requête SQL assez simple (enfin je crois...) qui récupérait dans une table T l'ensemble des ID qui possède à la fois une adresse EMAIL et une adresse fiscal FISC

en fait dans ma table j'ai plusieurs identifiant qui devrait être en double car il doit y avoir pour chaque ID : 2 lignes:

-1 ligne avec ADRESS_TYPE = 'EMAIL'
-1 ligne avec ADRESS_TYPE = 'FISC'

et moi je voudrai récupérer tous les ID qui n'ont qu'un seul enregistrement pour pouvoir ajouter le cas écheant l'enregistrement qui manque
jam92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 12h54   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
bonjour,

une requete générique :

Code :
1
2
3
4
5
6
 
SELECT mon_id
FROM ma_table
WHERE ma_cond IN (cond1, cond2)
GROUP BY mon_id
HAVING count(*) = 1
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2011, 13h22   #3
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

Si j'ai bien compris la logique de ta requete :

Selectionne moi tous les ID de ma table dont il n'existe aucune adresse de type MAIL => tous les id ne possedant qu'un seul adresse et de type FISC
UNION
Selectionne moi tous les ID de ma table dont il n'existe aucune adresse de type FISC => tous les id ne possedant qu'un seul adresse et de type MAIL

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
SELECT T.ID, 'EMAIL' AS adresse_manquante
FROM TABLE T
WHERE NOT EXISTS ( SELECT 1
                              FROM  TABLE T1
                              WHERE T.ID =T1.ID
                              AND T1.ADRESS_TYPE = 'EMAIL'
                             )
UNION
SELECT T.ID, 'FISC' AS adresse_manquante
FROM TABLE T
WHERE NOT EXISTS ( SELECT 1
                              FROM  TABLE T1
                              WHERE T.ID =T1.ID
                              AND T1.ADRESS_TYPE = 'FISC'
                             )
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 13h44   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
ou comment faire 4 scannages de tables, 2 jointures et un union là où un scannage + un group by suffit
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2011, 13h44   #5
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
Citation:
Envoyé par punkoff Voir le message
bonjour,

une requete générique :

Code :
1
2
3
4
5
6
 
SELECT mon_id
FROM ma_table
WHERE ma_cond IN (cond1, cond2)
GROUP BY mon_id
HAVING count(*) = 1
Je pense que cette requête suffit plutot que de faire UNION ...
__________________
Le Porc est un loup pour le Porc.
asmduty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h02   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 117
Points : 14
Points : 14
Envoyer un message via MSN à jam92400
Par défaut pb requete

Merci à tous du coup j'ai fait cette requête:

Code :
1
2
3
4
SELECT third_party, count(*) FROM postal_address
GROUP BY third_party
HAVING
count(*) < 2
le probleme c est que j'ai besoin d'ajouter une condition et je vois pas comment faire c est à dire qu'il me faut toute les ID qui n'ont qu'une seul enregistrement et dont le champA = 0

j'ai tenté ca mais ca marche pas:

Code :
1
2
3
4
5
SELECT third_party, count(*) FROM postal_address
GROUP BY third_party, champA
HAVING
count(*) < 2
AND champA = 1
jam92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h37   #7
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Il serait peut-être intéressant que tu commence avec les bases. Tu dois ici utiliser la clause WHERE.

Code :
1
2
3
4
5
SELECT third_party, count(*) 
FROM postal_address
WHERE champA = 1
GROUP BY third_party, champA
HAVING count(*) < 2
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2011, 17h50   #8
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 117
Points : 14
Points : 14
Envoyer un message via MSN à jam92400
hello Laure

C'est ce que j'ai fait dès le depart mais quand je prend un ID au hazard dans le resultat et que je le recherche dans la table il me sort 2 enregistrements

or moi je veux ceux qui n ont qu 1 enregistrement et qui en plus ont le champsA = 1
jam92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 19h09   #9
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Est-ce que le ChampA dans le GROUP BY est nécessaire ?
Cela pourrait fausser ta requête.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 07h34   #10
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Bonjour,

La condition sur le champA (y a pas de champ dans une bdd au passage mais des colonnes ) doit-être vérifiée avant ou après la condition d'une seule ligne par ID ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 08h29   #11
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 117
Points : 14
Points : 14
Envoyer un message via MSN à jam92400
Hello

Il doit être vérifier après
jam92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 08h37   #12
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Dans ce cas là il vaut mieux faire une requête imbriquée :

[EDIT] : après avoir réfléchi voici la requête qui devrait faire ce que tu souhaite

Code :
1
2
3
4
5
6
7
8
9
SELECT Temp.third_party, Nombre
FROM (
     SELECT third_party, count(*)  Nombre
     FROM postal_address 
     GROUP BY third_party
     HAVING count(*) < 2) Temp
JOIN postal_address p
ON p.third_party = Temp.third_party
WHERE champA = 1
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h55.


 
 
 
 
Partenaires

Hébergement Web