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 :

Jointure, lignes sans correspondance


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 27
    Points
    27
    Par défaut Jointure, lignes sans correspondance
    Bonjour,

    J'ai deux tables : produit (#, prix, idproduit) et photo(idproduit, présentation , urlphoto). Je fais une jointure sur idproduit

    Je voudrais sélectionner en une requête les produits n'ayant pas leur idproduit dans la table photo et ceux qu'il l'ont avec une ligne où la présentation est égale à un 1.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 083
    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 083
    Points : 30 838
    Points
    30 838
    Par défaut
    Présente nous la requête que tu as déjà construite en nous précisant ce que tu n'arrives pas à faire, nous t'aiderons à la faire évoluer.
    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.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 27
    Points
    27
    Par défaut
    SELECT * FROM produit , photos WHERE produit.idobjet = photos.idobjet AND presentation != '0'
    Cela me renvoye donc les lignes de la jointure où presentation est different de 0. Je voudrais aussi les lignes de produit qui n'ont pas pu etre jointe dans photos

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 083
    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 083
    Points : 30 838
    Points
    30 838
    Par défaut
    Commence par utiliser des jointures et des opérateurs normalisés.
    Ta requête devient cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT    * 
    FROM    produit
        INNER JOIN 
            photos 
            ON    produit.idobjet = photos.idobjet 
    WHERE    presentation <> '0'
    Ensuite, qualifie les colonnes que tu utilises et précise le type de leurs valeurs : presentation appartient à quelle table ? C'est du numérique ou du caractère ?
    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.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 036
    Points
    34 036
    Billets dans le blog
    14
    Par défaut
    C'est une union de deux requêtes.
    Citation Envoyé par pouic06 Voir le message
    Je voudrais sélectionner en une requête les produits n'ayant pas leur idproduit dans la table photo
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT pr.*
    FROM produit pr
    LEFT JOIN photos ph ON pr.idobjet = ph.idobjet
    WHERE ph.idobjet IS NULL


    et ceux qu'il l'ont avec une ligne où la présentation est égale à un 1.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT pr.*
     FROM produit pr
     INNER JOIN photos ph ON pr.idobjet = ph.idobjet
     WHERE ph.presentation = 1

    Union des deux :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT pr.*
     FROM produit pr
     LEFT JOIN photos ph ON pr.idobjet = ph.idobjet
     WHERE ph.idobjet IS NULL
    UNION
    SELECT pr.*
      FROM produit pr
      INNER JOIN photos ph ON pr.idobjet = ph.idobjet
      WHERE ph.presentation = 1
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    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 380
    Points
    18 380
    Par défaut
    La même requête que CinePhil sans le Union :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT pr.*
     FROM produit pr
     LEFT JOIN photos ph ON pr.idobjet = ph.idobjet
     WHERE coalesce(ph.presentation, 1) = 1

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 036
    Points
    34 036
    Billets dans le blog
    14
    Par défaut
    Le LEFT JOIN de ta requête Waldar va retourner tous les produits, même ceux qui ont une correspondance dans photos avec une présentation différente de 1.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  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 380
    Points
    18 380
    Par défaut
    Mais non mais non, le where filtre bien celà.

    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
    WITH Produit AS
    (
    select 1 AS idproduit union
    select 2 union
    select 3 union
    select 4
    ),
    Photo AS 
    (
    select 1 AS idproduit, 1 AS presentation union
    select 3, 1 union
    select 3, 2 union
    select 4, 2
    )
    SELECT pr.*
    FROM Produit pr
    LEFT JOIN Photo ph ON pr.idproduit = ph.idproduit
    WHERE coalesce(ph.presentation, 1) = 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    idproduit
    -----------
    1
    2
    3
    1 et 3 ont une photo avec présentation à 1
    2 n'a pas de photo
    4 a une photo avec présentation à 2 et ne ressort pas.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/05/2012, 17h14
  2. jointure , comment avoir les resultats sans correspondance
    Par venomelektro dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/05/2008, 15h20
  3. Saut de ligne sans <br/>
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 21/06/2007, 11h21
  4. Réponses: 1
    Dernier message: 28/07/2006, 03h57
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

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