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

Développement SQL Server Discussion :

[Débutante] Vérifier combinaison 2 colonnes dans 2 tables


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Par défaut [Débutante] Vérifier combinaison 2 colonnes dans 2 tables
    bonjour,
    je suis totalement débutante en sql.
    j'ai réussi a faire des tests sur de tables.
    mais j'ai 2 problèmes.
    1)j'ai pu vérifier que des valeurs étaient présentent entre 2 tables mais je me suis apercu qu'il ne vérifiait qu'une partie du texte:
    mes tables:
    classeur 1 les colonnes(Nom, Prenom, Filière,Matère)
    MATIERE_FILIERE les colonnes(FILIERE,DISCILPLINE)

    ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Matiere
    FROM Classeur1
    WHERE Classeur1.Matiere NOT IN (SELECT DISCIPLINE FROM MATIERE_FILIERE)
    je voudrais vérifier que les données dans ma table classeur 1 sont bonnes.

    ma requête m'a renvoyé aucune ligne fausse.

    hors j'avais une matière PRODUCTION qui n'existe pas dans ma table MATIERE_FILIERE il aurait du me la retourner mais rien.
    Par contre il y a une matière qui s'appel CN-PRODUCTION dans la table MATIERE_FILIERE.
    est ce parce qu'il a trouvé une partie de la chaîne de caractère?
    ou est ce que ma requête est fausse?
    faut il préciser un code spécial pour qu'il prenne bien la chaîne complète??


    2- j'aurais voulu vérifier que le couple Filière,matière de la table classeur1 existe bien en tant que FILIERE,DISCIPLINE dans ma table MATIERE_FILIERE
    j'ai tape la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Filière, Matiere
    FROM Classeur1
    WHERE Classeur1.Filière NOT IN (SELECT FILIERE FROM MATIERE_FILIERE) AND Classeur1.Matiere NOT IN (SELECT DISCIPLINE FROM MATIERE_FILIERE)
    pour qu'il me sorte les couples qui n'existe pas dans la table MATIERE_FILIERE
    ma requete est-elle bonne?

    merci par avance pour votre aide.
    et un peu d'indulgence,je suis vraiment débutante :-(

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 022
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par ines_douille Voir le message
    bonjour,
    je suis totalement débutante en sql.
    j'ai réussi a faire des tests sur de tables.
    mais j'ai 2 problèmes.
    1)j'ai pu vérifier que des valeurs étaient présentent entre 2 tables mais je me suis apercu qu'il ne vérifiait qu'une partie du texte:
    mes tables:
    classeur 1 les colonnes(Nom, Prenom, Filière,Matère)
    MATIERE_FILIERE les colonnes(FILIERE,DISCILPLINE)
    Les noms de vos objets (table, colonne...) ne doivent pas avoir d'accents ou autre caractères illicite. À me lire : http://sqlpro.developpez.com/cours/s...age=partie1#L1

    ma requête:
    SELECT Matiere
    FROM Classeur1
    WHERE Classeur1.Matiere NOT IN (SELECT DISCIPLINE FROM MATIERE_FILIERE)
    L'égalité entre vos chaine de caractères est relatif à la collation de la colonne, qui par défaut est hérité de la base. La plus souvent c'est CI AS (Case Insesitive, Accent Sensitive). Pour modifier cela utiliser une cluase COLLATE. De plus NOT IN ne reverra jamais rien si DISCIPLINE contient un NULL. Préférez alors faire semi anti jointure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Matiere
    FROM   Classeur1 AS C
           LEFT OUTER JOIN MATIERE_FILIERE AS MF
                ON C.Matiere = MF.DISCIPLINE COLLATE French_CI_AI --> Case Insensitive + Accent Insensitive
    WHERE  MF.DISCIPLINE IS NULL
    Vous pouvez aussi utiliser le NOT EXISTS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Matiere
    FROM   Classeur1 AS C
    WHERE  NOT EXISTS (SELECT * 
                       FROM   MATIERE_FILIERE AS MF
                       WHERE  C.Matiere = MF.DISCIPLINE)

    je voudrais vérifier que les données dans ma table classeur 1 sont bonnes.

    ma requête m'a renvoyé aucune ligne fausse.

    hors j'avais une matière PRODUCTION qui n'existe pas dans ma table MATIERE_FILIERE il aurait du me la retourner mais rien.
    Par contre il y a une matière qui s'appel CN-PRODUCTION dans la table MATIERE_FILIERE.
    est ce parce qu'il a trouvé une partie de la chaîne de caractère?
    Non, l'égalité est toujours stricte !

    ou est ce que ma requête est fausse?
    Plus probablement

    faut il préciser un code spécial pour qu'il prenne bien la chaîne complète??
    Peut être, par exemple la collation !


    2- j'aurais voulu vérifier que le couple Filière,matière de la table classeur1 existe bien en tant que FILIERE,DISCIPLINE dans ma table MATIERE_FILIERE
    j'ai tape la requete:
    SELECT Filière, Matiere
    FROM Classeur1
    WHERE Classeur1.Filière NOT IN (SELECT FILIERE FROM MATIERE_FILIERE) AND Classeur1.Matiere NOT IN (SELECT DISCIPLINE FROM MATIERE_FILIERE)

    Non, ça vous sort des choses mélangées et non conjointes (sur la même ligne). Il faut utiliser NOT EXISTS :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Matiere
    FROM   Classeur1 AS C
    WHERE  NOT EXISTS (SELECT * 
                       FROM   MATIERE_FILIERE AS MF
                       WHERE  C.Matiere = MF.DISCIPLINE
                         AND  C.Filière = MF.FILIERE)


    pour qu'il me sorte les couples qui n'existe pas dans la table MATIERE_FILIERE
    ma requete est-elle bonne?
    NON

    merci par avance pour votre aide.
    et un peu d'indulgence,je suis vraiment débutante :-(
    Apprenez le langage SQL. Mon livre, comme mon site web peuvent vous y aider !!!!

    A -
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 7
    Dernier message: 31/08/2012, 19h42
  2. Vérifier la présence d'une colonne dans une table
    Par m1sterd dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/11/2006, 12h13
  3. Données d'une table deviennent colonne dans autre table?
    Par christophe1245 dans le forum Access
    Réponses: 8
    Dernier message: 19/12/2005, 23h01
  4. [débutant] Résultat d'un exec dans une table temporaire
    Par amelie15 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/08/2005, 10h14
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 17h12

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