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 :

Création de vue avec besoin de sous requête


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut Création de vue avec besoin de sous requête
    Bonjour,

    Je sais que lors de la création d'une vue, on ne peut utiliser de sous requête.

    Y'aurait-il un moyen de contourner ou de forcer cela car j'aurais besoin d'une vue avec un NOT IN sur un champs. Je suis sous SQL Server 2000.

    En gros voilà ce que je voudrais forcer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT Champs1,
               Champs2
     
    FROM MaTable
     
    WHERE Champs1 NOT IN
                                    (SELECT Champs1
                                      FROM MaTable2)
        AND Champs1 NOT IN
                                    (SELECT Champs1
                                      FROM MaTable3)
    ;
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  2. #2
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    cela peut etre faisable avec une jointure externe.

    Bon courage

  3. #3
    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 : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Il est donc possible d'avoir deux jointure externe de MaTable vers les 2 autres tables ou dois-je les séparées.
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 135
    Par défaut
    NOT IN peut être remplacé avantageusement par une jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  Champs1
        ,   Champs2
    FROM    MaTable
        LEFT JOIN
            MaTable2
            ON  MaTable2.Champs1 = MaTable.Champs1
        LEFT JOIN
            MaTable3
            ON  MaTable3.Champs1 = MaTable.Champs1
    WHERE   MaTable2.Champs1 IS NULL
        AND MaTable3.Champs1 IS NULL
    ;
    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 Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Merci pour les réponses, j'avais pas pensé au IS NULL.

    Le temps de tester et je tag "Résolu" ...
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    +1 pour la jointure externe

    @al1_24 : dans certains cas, j'ai effectivement réécrit des requêtes en remplaçant les NOT IN par des OUTER JOIN WHERE IS NULL pôur des raisons de performance. Est-ce toujours avantageux ?

    Cela dit, j'ignorais que les sous-requête était interdite dans les vues... Vue que ça marche chez moi (sous Oracle 9.2)...

    Par contre, toutjours sous Oracle 9.2, on ne peut pas utiliser de vue dans une requête de création de vue matérialisée.

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

Discussions similaires

  1. création de vue avec jointures et fonctions mathématiques
    Par lepeule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/06/2011, 11h17
  2. Création de vues avec requêtes SQL et leur impression
    Par lepeule dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/05/2011, 10h57
  3. [AC-2007] Création d'état avec totaux d'une requête ?
    Par fragglerick dans le forum IHM
    Réponses: 4
    Dernier message: 19/05/2011, 22h21
  4. rapport avec condition de sous requête
    Par aigle_ma dans le forum Deski
    Réponses: 4
    Dernier message: 18/06/2007, 11h49
  5. [Débutant] Requête SELECT avec max et sous-requête
    Par joefou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 14h28

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