IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Problème requête avec OR


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut Problème requête avec OR
    Bonjour,



    J'aurai besoin de votre aide pour faire marcher ma requête

    J'ai une table qui contient des infos sur des personnes :
    PERSONNE(idpers, nom, prénom, adresse...).

    Ainsi qu'une dizaine d'autres tables, par exemple :
    TABLE1(idt1, champ1, champ2, idpers)
    TABLE2(idt2, champ1, champ2, idpers)
    TABLE3 (idt3, champ1, champ2, idpers)
    TABLE4 (idt4, champ1, champ2, idpers)

    Je voudrais qu'une personne puisse être supprimmée seulement si son idpers n'est pas présent dans une autre table. Donc je vérifie si la requête me renvoie un résultat ou non.

    Voila ce que j'ai fait : (je passe l'id en paramètre, donc par exemple ici id=1)

    SELECT * FROM table1, table2, table3, table4
    WHERE table1.idpers='1'
    OR table2.idpers='1'
    OR table3.idpers='1'
    OR table4.idpers='1'

    Et là c'est la cata, elle met une heure à s'éxécuter et me renvoie une tonne de lignes et si par contre une table ne contient aucune ligne elle me renvoie 0 lignes alors qu'elle ne devrait pas.

    Merci d'avance si vous pouvez m'aider!!

    Lara

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 115
    Par défaut
    iop
    tout d'abord c'est super long parce que tu n'a pas utilisé la contrainte d'intégrité référentiel.

    essaie ça :

    SELECT * FROM table1 t1, table2 t2, table3 t3, table4 t4,personne p
    WHERE (t1.idpers='1' and p.idpers = t1.idpers)
    OR (t2.idpers='1' and p.idpers = t2.idpers)
    OR (t3.idpers='1' and p.idpers = t3.idpers)
    OR (t4.idpers='1' and p.idpers = t4.idpers)

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 14
    Par défaut
    Merci de ton aide hurricane. Je viens d'essayer mais malheureusement ça ne fonctionne pas. c'est toujours aussi long et ça renvoie 0 résultat si une table est vide

  4. #4
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    une requete du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    SELECT 
        a.nb+b.nb+c.nb+d.nb 
    FROM
    (SELECT  COUNT(1) as nb 
         WHERE  EXISTS (SELECT 1 FROM table1 where id_pers='1')) a,
    (SELECT  COUNT(1) as nb 
         WHERE  EXISTS (SELECT 1 FROM table2 where id_pers='1')) b,
    (SELECT  COUNT(1) as nb 
         WHERE  EXISTS (SELECT 1 FROM table3 where id_pers='1')) c,
    (SELECT  COUNT(1) as nb 
         WHERE  EXISTS (SELECT 1 FROM table4 where id_pers='1')) d
    peut elle vous aider ??
    Elle devrait renvoyer 0 si aucun id_pers n'a été trouvé dans les 3 tables

    A tester et a adapter

    Cependant, si une regle d'integrité relationelle avait été posée sur cette colonne, le SGDB aurait fait le travail a votre place (voir l'utilisation de FOREIGN KEY)

    Bon courage

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 115
    Par défaut
    Je ne suis vraiment pas sûr de la syntaxe mais peux-tu essayer ça :

    SELECT p.idpers FROM table1 t1, table2 t2, table3 t3, table4 t4,personne p
    WHERE (t1.idpers='1' and p.idpers = t1.idpers +)
    OR (t2.idpers='1' and p.idpers = t2.idpers +)
    OR (t3.idpers='1' and p.idpers = t3.idpers +)
    OR (t4.idpers='1' and p.idpers = t4.idpers +)

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Cette syntaxe n'est pas conforme à la norme du langage SQL.

    En précisant le SGBD que vous utilisez et sa version, les réponses proposées seront adaptées aux spécificités et limitations de celui-ci.
    Règles du forum Langage SQL à lire par tous
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème requête avec INSTR()
    Par yohan0262 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 13/06/2007, 10h20
  2. Problème requête avec access
    Par celiaaa dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/05/2007, 12h40
  3. Problème requête avec 2 conditions
    Par omgirl dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/07/2006, 16h19
  4. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10
  5. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo