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 :

requête select comparaison


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut requête select comparaison
    bonjour
    je suis débutant en sql et j'aimerai une aide pour continuer à avancer.

    voila la situation simplifiée : j'ai une table avec deux colonnes : nom et période.du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    periode nom
    2       jim
    2       job
    2       tim
    3       jim
    3       job
    3       rudy
    3       rob
    je cherche à afficher les noms qui se trouvent dans la "liste" des enregistrements dont le champ période = 3 mais qui ne sont pas dans la "liste" des enregistrements dont le champ période = 2.

    en fait je fais une comparaison entre les deux périodes pour n'afficher que les nouvelles entrées.

    cela doit être très simple mais j'avance pas à pas donc merci pour votre patience

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Quel SGBDR utilisez vous ?


  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT nom
    FROM Tatable
    WHERE num = 3
    EXCEPT
    SELECT nom 
    FROM TaTabel
    WHERE num = 2
    (Si t'es sous Oracle, remplace EXCEPT par MINUS)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    merci pacman et chtulus
    en fait j'utilise phpmyadmin pour faire mes requetes

    et il semble que mon système de base de données ne reconnait pas "EXCEPT" il me retourne le message suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MySQL Error#: 1064 Erreur de syntaxe près de'EXCEPT SELECT nom FROM essai WHERE periode = 2' à la ligne 1
    quelle est la solution?

    merci d'avance

    edit : il semble qu'il faille passer par une table temporaire mais je ne connait pas le fonctionnement

  5. #5
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    MySQL ne support pas EXCEPT, donc je vous propose une requete de non correspondance:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT nom
    FROM Tatable
    WHERE num = 3  and nom NOT IN (
    SELECT nom 
    FROM TaTabel
    WHERE num = 2)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    merci beaucoup pour vos conseils

    tout fonctionne parfaitement
    merci et à bientôt sur le forum!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut re
    bonjour à tous
    je me permet de revenir sur cette discussion parce que je suis un peu bloqué dans mon travail.

    j'ai écrit ma requete SQL dans mon code php (je programme des pages dynamiques pour un intranet) et il me retourne un message d'erreur lorsque j'essai d'afficher la page.
    je pense que c'est plutot un probleme de sql c'est pourquoi je suis venu demander une aide sur ce forum.

    Voici l'extrait du code php contenant la requete sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $colname_TOTAL10 = "-1";
    if (isset($_GET['rayon'])) {
      $colname_TOTAL10 = (get_magic_quotes_gpc()) ? $_GET['rayon'] : addslashes($_GET['rayon']);
    }
    mysql_select_db($database_stocks_toxiques, $stocks_toxiques);
    $query_TOTAL10 = sprintf("SELECT SUM(valeur_stock_toxique) as TOTAL10 FROM (SELECT reference,valeur_stock_toxique FROM generale WHERE rayon = 1 AND periode ='3' AND reference NOT IN (SELECT reference,valeur_stock_toxique FROM generale WHERE rayon = 1 AND periode ='2'))", $colname_TOTAL10);
    $TOTAL10 = mysql_query($query_TOTAL10, $stocks_toxiques) or die(mysql_error());
    $row_TOTAL10 = mysql_fetch_assoc($TOTAL10);
    $totalRows_TOTAL10 = mysql_num_rows($TOTAL10);
    et voici le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Warning: sprintf() [function.sprintf]: Too few arguments in C:\Program Files\EasyPHP 3.0\www\stockstoxiques\evolution.php on line 98
    Query est vide
    je rappelle ce que je cherche à faire :
    j'ai une base de données contenant des références de produit. certaines de ces références sont la sur plusieurs mois, d'autres pas.
    je cherche à faire la somme des valeurs de stock des référence qui sont présentes dans la période 3 mais qui ne sont pas presente dans la periode 2.

    j'ai testé la requete sql avec phpMyAdmin et il mouline pendant plusieurs minutes sans afficher de résultat.

    ma base contient 60000 lignes X 30 colonnes = 1 800 000 données.

    merci à tous

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    C'est étonnant que vous ne preniez pas une erreur de syntaxe.

    Vous comparez une colonne à deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...reference NOT IN (SELECT reference,valeur_stock_toxique...
    Votre requête peut être simplifiée si seule la somme vous intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT sum(valeur_stock_toxique) as TOTAL10
    FROM generale
    WHERE rayon = 1 AND periode = '3'
    AND reference NOT IN (SELECT reference FROM generale
                          WHERE rayon = 1 AND periode = '2')

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut confirmation
    merci waldar

    en effet ma requête n'était pas correcte et j'ai effectué les modifs.

    je l'ai testée avec phpMyadmin et il me sort le résultat en trois secondes (c'est long mais mieux que rien).

    par contre lorsque je l'incorpore à mon code php il me retourne la même erreur donc c'est plus un probleme de code php.

    je vous remercie car grâce à vous j'ai quand même solutionné une partie de mon probleme.

    je vais redirigé mon probleme vers le bon forum.

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

Discussions similaires

  1. [MySQL] Comparaison de 2 requêtes SELECT
    Par Floyus dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/05/2013, 05h19
  2. Résultat commençant par un chiffre avec requête SELECT
    Par nicolas.pissard dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/04/2010, 13h31
  3. Insertion multiple à base de sous requête SELECT
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2005, 16h34
  4. SQL Server 7.0 - Requête Select
    Par sangokus dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/03/2004, 10h32
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

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