{SQL Server} Vue avec deux SELECT

bobenausaure Messages postés 241 Statut Membre -  
Ahmed402 Messages postés 21 Statut Membre -
Bonjour,
je souhaite créer une vue afin d'afficher tous les produits de ma BdD. Un produit est soit un DVD soit un roman (héritage). Dans ma table PRODUIT, j'ai numprod, titreprod et annee. Dans ma table DVD, j'ai realisateur (+ numprod, titreprod et annee) et dans ma table ROMAN, j'ai auteur (+ numprod, titreprod et annee).

Ma vue ressemble à ça :

create view affich_prod
as
select p.titreprod, p.annee
from dvd d, produit p
where d.numprod = p.numprod
or
select p.titreprod, p.annee
from roman r, produit p
where r.numprod = p.numprod;
go

et le message d'erreur est : Expression de type non booléen spécifiée dans un contexte où une condition est attendue, près de ';'.

est-il possible de créer une vue avec 2 select ?
si non, comment puis-je faire ?
merci d'avance.
Configuration: Windows Vista
Firefox 3.0.10

3 réponses

  1. erickacou Messages postés 2 Statut Membre 1
     
    Regarde bien dans cette séquence tu appelles 3 champs

    >> UNION
    SELECT numprod, titreprod, annee
    FROM PRODUIT
    go

    Pendant que dans les autres tu appelles 4 champs, regarde bien la syntaxe que je t'ai envoyée

    Bonne journée
    1
    1. bobenausaure Messages postés 241 Statut Membre 16
       
      oui mais je ne veux pas que le numéro et le titre d'affiché, je veux également le reste...
      0
  2. Eric KACOU
     
    Salut, il faut que tu crées une requête union, exemple

    SELECT numprod, titreprod, annee
    FROM ROMAN
    UNION
    SELECT numprod, titreprod, annee
    FROM DVD
    UNION
    SELECT numprod, titreprod, annee
    FROM PRODUIT

    ça devrait marcher

    Tiens moi au courant
    0
    1. bobenausaure Messages postés 241 Statut Membre 16
       
      merci pour ta réponse.

      j'ai donc remplacé le "or" par "union", ce qui donne :

      create view affich_prod
      as
      select p.titreprod, p.annee
      from dvd d, produit p
      where d.numprod = p.numprod
      union
      select p.titreprod, p.annee
      from roman r, produit p
      where r.numprod = p.numprod;
      go

      (je suis sous sql server 2005)

      une erreur s'affiche : Msg 421, Niveau 16, État 1, Procédure affich_prod, Ligne 3
      Le type de données text ne peut pas être sélectionné en tant que DISTINCT, car il n'est pas comparable.
      0
      1. erickacou Messages postés 2 Statut Membre 1 > bobenausaure Messages postés 241 Statut Membre
         
        Salut , Attention lis bien la requête-union que je t'ai envoyée, dans le From, j'ai pas deux tables. Tu as trois tables, tu devrais avoir (3) Select et (2) Union

        Bye
        0
      2. bobenausaure Messages postés 241 Statut Membre 16 > erickacou Messages postés 2 Statut Membre
         
        ah oui d'accord.
        sauf que je veux afficher tous les produits, en affichant aussi l'auteur pour les romans et le réalisateur pour les DVD.

        donc je fais :

        create view affich_prod
        as
        SELECT numprod, auteur, annee, titreprod
        FROM ROMAN
        UNION
        SELECT numprod, realisateur, annee, titreprod
        FROM DVD
        UNION
        SELECT numprod, titreprod, annee
        FROM PRODUIT
        go


        mais il m'affiche une erreur : Toutes les requêtes combinées à l'aide d'un opérateur UNION, INTERSECT ou EXCEPT doivent posséder un même nombre d'expressions dans leurs listes cibles.

        j'ai compris l'erreur : 4 colonne pour roman et DVD et 3 pour produit, ce qui ne va pas, mais je ne vois pas comment faire...
        0
      3. bobenausaure Messages postés 241 Statut Membre 16 > bobenausaure Messages postés 241 Statut Membre
         
        j'ai testé également ceci :

        create view affich_prod
        as
        select p.titreprod, d.realisateur, p.annee
        from produit p, dvd d
        where p.numprod = d.numprod
        union
        select p.titreprod, r.auteur, p.annee
        from produit p, roman r
        where p.numprod = r.numprod
        go

        mais il me dit que le type de données text ne peut être sélectionné en tant que distinct car il n'est pas comparable...
        0
  3. Ahmed402 Messages postés 21 Statut Membre 4
     
    pouvez-vous essayer:

    create view affich_prod as
    (select p.titre,p.anne,d.realisateur from dvd d, produit p where d.numprod = p.numprod)
    union
    (select p.titre,p.anne,r.auteur from produit p, roman r where p.numprod = r.numprod)

    Tenez moi au courant! Merçi.
    0