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

MS SQL Server Discussion :

Comment faire une jointure sélective


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut Comment faire une jointure sélective
    J'ai une base de données dans laquelle je veut effectuer une requete que voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select
     A.pic_id "pictures_id",A.web_id "pictures_web_id",
     B.feed_id "feed_id", B.web_id "feed_web_id"
    from
     pictures A, feed B
    where
     A.web_id = 2
     or
     B.web_id = 2
    Ma requete ne marche evidement pas. En fait la difficulté est que dans les tables pictures et feed il ce peut que seulement une seule d'entre elles possède des données du coup le B.web_id = 2 fait bogué ma requete car la table feed ne possède aucun enregistrement ayant pour web_id 2 (web_id est FK)


    voici les 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
    62
    63
    64
     
     
    create table web (
     web_link        varchar(250)      not null unique,
     web_id          int               identity(2,1),
     web_country     varchar(60)       not null, 
     web_language    varchar(10)       not null,
     web_title       nvarchar(200)      not null default 'Document untitled',
     web_size        float             not null,
     web_maps        bit               not null default '0',
     constraint [pk_web] primary key
     (
       [web_id]
     )
    )
    go
     
     
    create table pictures (
     pic_link        varchar(250)   not null unique,
     pic_id          int             identity(2,1),
     web_id          int            not null,
     pic_loc         varchar(250)   not null,
     pic_title       nvarchar(200)   not null,
     pic_size        float           not null,
     pic_type        int             not null,
     pic_width       int             not null,
     pic_height      int             not null,
     constraint [pk_pictures] primary key
     (
       [pic_id]
     )
    )
    go
     
     
    create table feed (
     feed_link        varchar(250)  not null unique,
     feed_id          int           identity(2,1),
     web_id           int           not null,
     feed_title       nvarchar(200) not null,
     feed_description nvarchar(200) not null,
     feed_size        float        not null,
     constraint [pk_feed] primary key
     (
       [feed_id]
     )
    ) 
    go
     
     
     
     
     
    alter table feed
      add constraint fk_feed_reference_web foreign key (web_id)
        references web (web_id)
    go
     
     
    alter table pictures
      add constraint fk_pictures_reference_web foreign key (web_id)
        references web (web_id)
    go

    J'ai aussi un autre soucie j'utilise des clefs autoincrémenté en guise de clef primaire , mais lorsque je supprime disont l'enregistrement 3 d'une table X et que par la suite j'ajoute des données Sql les ajoute avec la clef 4 comment faire pour boucher les trous ?

    thx a tous

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Par défaut
    Salut,

    rien compris. Tu as 3 tables en fait.
    La table WEB contient tous les WEB_ID, et les tables PICTURE et FEED ont une jointure avec WEB (champ WEB_ID).

    Correct ?

    Ensuite tu veux quoi ? Tu veux tous les enregistrements de PICTURE et de FEED qui ont un WEB_ID = XXX, i.e. que le WEB_ID = XXX est forcément présent dans les 3 tables ??

    Ensuite pour ton histoire de "combler les trous", ben non ce n'est pas possible avec de l'autoincrémentation. Puis entre nous, je ne vois vraiment pas à quoi ce sert. C'est une clef 'technique", qui donc n'a aucun aspect fontionnel. Peu importe sa valeur pourvu que tes contraintes d'intégrités soient assurées.

  3. #3
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    Ensuite tu veux quoi ? Tu veux tous les enregistrements de PICTURE et de FEED qui ont un WEB_ID = XXX, i.e. que le WEB_ID = XXX est forcément présent dans les 3 tables ??
    Tout a fait a cela près que le web_id n'est pas forcément présent dans les trois tables

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Par défaut
    Citation Envoyé par mobscene
    Tout a fait a cela près que le web_id n'est pas forcément présent dans les trois tables
    Salut,

    Bon, on va quand même supposer qu'il est dans la table WEB (puisque c'est ta clef secondaire).

    Ce que tu demandes n'est rien d'autre qu'une jointure ouverte...
    Si il n'y a pas de web_id = XXX dans l'une ou l'autre des tables, les valeurs renvoyées seront NULL.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select 
    	P.pic_id 'pictures_id',
    	P.web_id 'pictures_web_id',
    	F.feed_id 'feed_id', 
    	F.web_id 'feed_web_id'
    FROM WEB W 
    LEFT JOIN pictures P
    ON W.WEB_ID = P.WEB_ID
    LEFT JOIN FEED F
    ON W.WEB_ID = F.WEB_ID
    --ICI on choisit la valeur web_id à filtrer
    WHERE W.web_id = XXXXXX

Discussions similaires

  1. Comment faire une jointure externe en Hibernate ?
    Par Battosaiii dans le forum Hibernate
    Réponses: 4
    Dernier message: 01/09/2011, 14h37
  2. [XL-2007] comment faire une Jointure SQL en excel VBA
    Par Maxim0 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/07/2011, 19h04
  3. Comment faire une jointure sur toutes mes tables
    Par vevere dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/03/2011, 14h09
  4. Réponses: 1
    Dernier message: 09/11/2006, 12h08
  5. Comment faire une jointure ?
    Par Terminator dans le forum Langage SQL
    Réponses: 12
    Dernier message: 16/10/2005, 13h26

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