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 :

Comparer les valeurs de deux colonnes d'une table


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 56
    Points : 34
    Points
    34
    Par défaut Comparer les valeurs de deux colonnes d'une table
    Bonjour à tous !

    Je suis nouveau dans les bases de données.

    J'une table nommée coordab ayant 3 colonnes : IMSI, MDN, NUMF . Mon souci de savoir la requête qui permet de:

    - Prendre chaque ligne de NUMF et comparer ses 7 derniers chiffres aux 7 derniers chiffres de chaque ligne de IMSI

    - Là où ces 7 derniers chiffres sont égaux, il recupère cette ligne IMSI, et le MDN de cette ligne ainsi que la ligne NUMF testé.

    Exemple:

    ------IMSI----------------------MDN------------NUMF
    624030743830010-------2373300002E-------2333000034
    624030743830015-------2373300002S------2333830023
    624030743830019-------237330000D1-------2333000015
    624030743830023---2373300002N--------2333000084
    624030743830000-------237330000DO-------2333000009

    Résultats:

    NUMF : 2333830023
    IMSI : 624030743830023
    MDN : 2373300002N


    S'il vous plait aidez moi.
    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    quel est votre SGBDR ?

    Vous pouvez faire une auto-jointure, en comparant NUMF aux 7 derniers caractères de IMSI, mais... n'attendez pas de bonnes performances d'une telle requête !

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 148
    Points : 1 414
    Points
    1 414
    Par défaut
    En ajoutant une colonne calculée (qui ne contiendrait que les 7 derniers caractères de IMSI) et en réalisant l'auto-jointure comme proposé par aieeeuuuuu, cela devrait accélérer l'exécution (si création des index adéquats)

    a+
    olivier

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 101
    Points : 28 399
    Points
    28 399
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    En ajoutant une colonne calculée (qui ne contiendrait que les 7 derniers caractères de IMSI)
    Ou en créant un index sur cette expression...
    Encore faudrait-il que l'une ou l'autre de ces fonctionnalités soit prise en charge par le SGBD utilisé

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Merci pour votre AIDE.

    En fait j'ai fait une erreur au niveau l'énoncé:

    Voici mon problème:

    J'ai une table nommée coordab ayant 2 colonnes : IMSI, MDN
    et une autre table de nom numero ayant une colonne de nom NUMF .
    Mon souci de savoir la requête qui permet de:
    - Prendre chaque ligne de la colonne NUMF de la table numero et comparer ses 7 derniers
    chiffres aux 7 derniers chiffres de chaque ligne de la colonne IMSI.
    - Là où ces 7 derniers chiffres sont égaux, il recupère cette ligne IMSI, et le MDN de cette
    ligne ainsi que la ligne NUMF testé (de la table numero).

    Exemple:

    ------IMSI--------------------MDN------------NUMF (de la table numero)

    624030743830010-------2373300002E-------2333000034
    624030743830015-------2373300002S------2333830023
    624030743830019-------237330000D1-------2333000015
    624030743830023---2373300002N-----2333000084
    624030743830000-------237330000DO-------2333000009

    Résultats:


    NUMF : 2333830023
    IMSI : 624030743830023
    MDN : 2373300002N


    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
        <?php	
    set_time_limit(0);
    error_reporting(E_ALL ^ E_NOTICE);
     
    	//Connexion à la BD
    mysql_connect('localhost','root','');
    mysql_select_db('gestnum');
     
    $sql = 'select t1.IMSI, t1.MDN, t2.NUMF
    from coordab t1
    inner join (
        select distinct NUMF from numero
    ) t2 ON SUBSTRING(t2.NUMF, -7) = SUBSTRING(t1.IMSI, -7)';
     
    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $i=0; 
    // on va scanner tous les tuples un par un
    while ($data = mysql_fetch_array($req)) 
        {
    	$i++; 
    	// on affiche les résultats
    	echo 'IMSI : '.$data['IMSI'].'<br />';
    	echo 'MDN : '.$data['MDN'].'<br />';
    	echo 'NUMF : '.$data['NUMF'].'<br /><br />';
        }
    mysql_free_result ($req);
    mysql_close ();
    ?>
    Quand j'exécute ce code, j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur SQL !
    select t1.IMSI, t1.MDN, t2.NUMF from coordab t1 inner join ( select distinct NUMF from numero ) t2 ON SUBSTRING(t2.NUMF, -7) = SUBSTRING(t1.IMSI, -7)
    Unknown column 'NUMF' in 'field list'
    S'il vous plait aidez moi, je ne connais pas.
    Merci d'avance.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    J'utilise MySQL

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Quelle est la structure de tes tables de quels types sont les différentes colonnes , entier, varchar, varchar(15)....
    Quelle version de MySQL? Il me semble que les très anciennes versions de Mysql ne supportaient pas les sous-requêtes.

    Cordialement
    Soazig

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Voilà la structure de mes tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    -- phpMyAdmin SQL Dump
    -- version 4.0.4
    -- http://www.phpmyadmin.net
    --
    -- Client: localhost
    -- Généré le: Jeu 13 Mars 2014 à 14:15
    -- Version du serveur: 5.6.12-log
    -- Version de PHP: 5.4.12
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    --
    -- Base de données: `gestnum`
    --
    CREATE DATABASE IF NOT EXISTS `gestnum` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
    USE `gestnum`;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `coordab`
    --
     
    CREATE TABLE IF NOT EXISTS `coordab` (
      `ida` int(10) NOT NULL AUTO_INCREMENT,
      `IMSI` char(15) NOT NULL,
      `MEID` char(14) NOT NULL,
      `ESN1` char(8) NOT NULL,
      `PUK1` char(8) NOT NULL,
      `AKY` char(16) NOT NULL,
      `MDN` char(13) NOT NULL,
      `NUMF` char(13) NOT NULL,
      PRIMARY KEY (`ida`),
      UNIQUE KEY `coordab_IMSI` (`IMSI`),
      KEY `ida` (`ida`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=364552 ;
     
    -- --------
     
    --
    -- Structure de la table `numero`
    --
     
    CREATE TABLE IF NOT EXISTS `numero` (
      `idnum` int(10) NOT NULL AUTO_INCREMENT,
      `num` char(13) NOT NULL,
      PRIMARY KEY (`idnum`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
     
     
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    S'il vous plait aidez moi à résoudre ce problème.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    As-tu lu le message d'erreur que te donnes MySQL.
    Il ne connait pas la colonne Numf dans ta requête tu fais un select numf dans la table numero, or la table numero ne possède pas de colonne numf en revanche elle possède une colonne num.

    Cordialement
    Soazig

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup pour votre AIDE.
    Maintenant tout marche bien.
    Salut !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/01/2013, 11h03
  2. Comparer les valeurs de deux colonnes d'une feuille excel
    Par charrynsasi dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/12/2012, 14h40
  3. [DeskI XiR2] Comparer les valeurs de deux colonnes
    Par EmmanuelleC dans le forum Débuter
    Réponses: 2
    Dernier message: 27/02/2009, 08h45
  4. Réponses: 13
    Dernier message: 20/04/2007, 17h30
  5. Réponses: 8
    Dernier message: 19/04/2007, 19h41

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