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

Requêtes MySQL Discussion :

Obligé de précisé les noms des tables des colonnes dans la clause where ?


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 1
    Points
    1
    Par défaut Obligé de précisé les noms des tables des colonnes dans la clause where ?
    Bonjour à tous,

    Voila j'utilise mysql 5.0 et je souhaiterais executer cette requette qui devrait supprimer tous les enregistrements de table_1,table_2 et table_3 qui ont un numero qui n'existe pas dans table_a ou table_b :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE t1,t2,t3 FROM table_1 t1,table_2 t2,table_3 t3 WHERE numero NOT IN
    (
    select numero from table_a
    UNION
    select numero from table_b
    )
    seulement j'obtiens cette erreur :
    Column 'numero' in IN/ALL/ANY subquery is ambiguous


    Je sais que je peux faire ça en plusieurs requetes mais je souhaiterais faire le plus court et le plus optimisé possible.


    Si quelqu'un peut m'aider je le remerci d'avance

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    C'est plus rapide et plus propre de faire 3 DELETE que cette requête.

    En effet tu n'indiques pas à MySQL quelles sont les conditions de jointure entre les tables t1,t2,t3 (il n'y a d'ailleurs probablement pas de relation logique entre les lignes de ces 3 tables que tu veux supprimer), donc il va certainement faire un produit cartésien ou en tout cas une jointure coûteuse et longue à exécuter avant de deleter les bonnes lignes...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci de ta réponse.

    Je pensais que c'était moins couteux comme ça mais je dois me tromper.

    En fait ce qui m'embete le plus c'est d'avoir beaucoup de ligne de code en réécrivant 3 fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (
    select numero from table_a
    UNION
    select numero from table_b
    UNION
    select numero from table_c
    UNION
    select numero from table_d
    ...
    )
    pour faire quelque chose d'aussi simple

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    table_a, table_b, table_c, table_d... Il n'y aurait pas un problème de conception ? Pourquoi 4 tables à la structure apparemment similaire ?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Points : 1
    Points
    1
    Par défaut
    Non en fait dans mon premier post j'avais simplifié les choses.

    En réalité il y a plus de tables ou je dois supprimer et plus de tables ou je recherche les numero, le plus simple c'est de juste prendre en compte ce que j'ai écrit dans mon premier post.


    Peut être que si je fais la recherche de l'ensemble des numero contenus dans table_a et table_b dans une seule requete avec un select et que j'enregistre les résultat dans un array (avec php) et que je fais 3 requetes delete avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where numero NOT IN(les numeros du select séparés par ',')
    ce serai plus efficace que de faire la recherche du select dans chaque requete delete. Qu'en pense tu ?

Discussions similaires

  1. Ajouter les paragraphes à la table des matières
    Par GatH7614 dans le forum Mise en forme
    Réponses: 6
    Dernier message: 16/07/2008, 14h40
  2. Réponses: 1
    Dernier message: 01/12/2007, 15h18
  3. Injection des accents dans les nom de tables ?
    Par lathenor dans le forum SQLite
    Réponses: 3
    Dernier message: 21/05/2007, 11h36
  4. les données des tables son perdu dans SqlPlus
    Par princessa dans le forum Sql*Plus
    Réponses: 3
    Dernier message: 09/03/2007, 19h27
  5. Recherchez les noms débutant par des chriffres ou des /[% ..
    Par jack1234 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/09/2005, 19h55

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