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

Requêtes et SQL. Discussion :

[SQL]incrémentation sur trois niveau


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Par défaut [SQL]incrémentation sur trois niveau
    Bonjour,

    Je vous explique mon défis. J'ai trois tables dont la premier génère un autonumber (Niveau GrandParent). Une deuxième table est liée avec la première (1-n) qui veut dire que pour chaque enregistrement de la première table, il a plusieurs enregistrements dans la deuxième table possible et pour chaque enregistrement de cette dernière il peut avoir plusieurs enregistrements dans la troisième table. Jusqu'à présent rien de compliqué. Dans chacune des tables, j'ai un autonumber clié.

    J'ai comme défis de générer un numéro de série à partir de ces trois niveaux de table genre 01-01-01. Je dois cependant pouvoir produire un numéro de série avec des suites logiques comme:

    01-01-01, 01-01-02, 01-01-03;
    01-02-01, 01-02-02, 01-02-03;
    01-03-01, 01-03-02, 01-03-03;...

    Si vous suivez la suite de numéro de série, il n'est pas possible à la base d'utiliser les autonumber pour générer une suite logique de numéro de série puisque ces autonumber ne peuvent pas recommencer à 0 dans la troisième table pour chacun nouvel enregistrement de la deuxième table et ainsi de suite.

    Est-ce que vous avez déjà fait face à ce problème ? Avez vous un solution ?

  2. #2
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Dans le code suivant, il faut remplacer :
    T1, T2 et T3 par les noms respectifs de tes tables 1, 2 et 3
    N1, N2 et N3 par les noms respectifs de tes champs clé primaire des tables 1, 2 et 3
    N1b et N2b par les noms respectifs de tes champs clé étrangère des tables 2 et 3


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Format((select count(*) FROM T1 as Tb1 Where TA.N1 >=Tb1.N1),"00") & "-" & Format((select count(*) FROM T2 as Tb2 Where TB.N2 >=Tb2.N2 AND Tb2.N1b = TA.N1),"00") & "-" & Format((select count(*) FROM T3 as Tb3 Where TC.N3 >=Tb3.N3 AND Tb3.N2b = TB.N2),"00") AS Cle_Code
    FROM (T1 AS TA INNER JOIN T2 AS TB ON TA.N1 = TB.N1b) INNER JOIN T3 AS TC ON TB.N2 = TC.N2b

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Par défaut
    Citation Envoyé par Maxence HUBICHE
    Dans le code suivant, il faut remplacer :
    T1, T2 et T3 par les noms respectifs de tes tables 1, 2 et 3
    N1, N2 et N3 par les noms respectifs de tes champs clé primaire des tables 1, 2 et 3
    N1b et N2b par les noms respectifs de tes champs clé étrangère des tables 2 et 3


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Format((select count(*) FROM T1 as Tb1 Where TA.N1 >=Tb1.N1),"00") & "-" & Format((select count(*) FROM T2 as Tb2 Where TB.N2 >=Tb2.N2 AND Tb2.N1b = TA.N1),"00") & "-" & Format((select count(*) FROM T3 as Tb3 Where TC.N3 >=Tb3.N3 AND Tb3.N2b = TB.N2),"00") AS Cle_Code
    FROM (T1 AS TA INNER JOIN T2 AS TB ON TA.N1 = TB.N1b) INNER JOIN T3 AS TC ON TB.N2 = TC.N2b
    Bonjour

    Ce code semble excellent ! Cependant, est-ce que tu pourrais me fournir un peu plus de détailles sur la dernière ligne de tes explications: "N1b et N2b par les noms respectifs de tes champs clé étrangère des tables 2 et 3". Je ne suis pas sur de comprendre qu'est ce qu'un champs clé étrangère ?

    De plus, ce code doit être intégré à quel endroit ? Dans un formulaire, requete, ... ?

    Merci,

  4. #4
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Clé étrangère : Champ répétant la clé primaire pour permettre la relation.
    exemple, si tu as une table clients(cliID, cliNom) et une table commandes(cdeID, cdeFKcliID, cdeDate), tu feras la liaison entre cliID et cdeFKcliID
    cliID est la clé primaire
    cdeFKcliID est la clé étrangère


    Il s'agit d'une requête.
    Tu fais une requête, en modé SQL
    Rien de plus.
    tu auras les codes qui apparaitront.
    Rien de plus.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Par défaut
    Citation Envoyé par Maxence HUBICHE
    Clé étrangère : Champ répétant la clé primaire pour permettre la relation.
    exemple, si tu as une table clients(cliID, cliNom) et une table commandes(cdeID, cdeFKcliID, cdeDate), tu feras la liaison entre cliID et cdeFKcliID
    cliID est la clé primaire
    cdeFKcliID est la clé étrangère


    Il s'agit d'une requête.
    Tu fais une requête, en modé SQL
    Rien de plus.
    tu auras les codes qui apparaitront.
    Rien de plus.
    Merci pour tous! Ca marche!

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

Discussions similaires

  1. [MySQL] Requête SQL complexe sur trois tables
    Par NET_Nicolas dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/08/2011, 18h24
  2. Requete SQL avec jointure sur trois tables
    Par pit2121 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/05/2008, 23h07
  3. Requête SQL avec jointure sur trois tables
    Par pit2121 dans le forum SQL
    Réponses: 0
    Dernier message: 19/05/2008, 20h24
  4. auto-incrémentation sur une primary key avec sql server
    Par pops4 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/05/2007, 14h24
  5. [SQL Server 8] Discussion : Full Jointure sur trois tables
    Par Baquardie dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/12/2006, 14h01

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