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 MySQL Discussion :

Join entre deux tables [MySQL-5.0]


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 24
    Points
    24
    Par défaut Join entre deux tables
    Bonjour à tous,

    Ayant deux tables, j'aimerais récupérer tous les éléments se trouvant dans les 2 tables simultanément (intersection et unqiuement l'intersection). Aussi, j'aimerais avoir l'inverse, c'est-à-dire tous les éléments se trouvant dans une table mais pas dans l'autre et uniquement ceux-là (A sans B ou B sans A).

    Pour que les choses soient peut-être plus concrètes, voici un schéma des deux tables concernées:

    TableA (évènements se produisant)
    ---------------------------
    event | timestamp
    ---------------------------
    A | 2013-02-02 10:02:34
    C | 2013-04-02 17:03:14
    ....

    TableB (évènements attendus)
    ------------------
    event | day | time
    ------------------
    A | 1 | 50
    B | 3 | 100

    ....
    event ==> clé unique
    day ==> 1 = Lundi, 2 = Mardi, ....
    time ==> secondes après minuit



    1. j'aimerais donc avoir uniquement les évènements qui coïncident entre les deux tables. C'est à dire pour un certain jour de la semaine précis et une certaine heure (secondes après minuit), ai-je bien un évènement (attendu) se produisant en vérité.
    2. Inversément, j'aimerais avoir les évènements attendus qui ne se sont pas produits sachant que si un évènement est attendu mercredi à 1h par exemple, c'est le cas pour tous les mercredis de chaque semaine.

    1. Voici la query que j'ai, sans être du tout certain qu'elle soit correcte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select a.event 
    from tableA a 
    inner join tableB b on a.event = b.event 
    where b.day = WEEKDAY(a.timestamp)+1 
      and time_to_sec(a.timestamp) between b.time-30 and b.time+30;
    2. j'ai du mal à savoir comment extrapoler le fait que si j'ai un évènement se produisant pour lundi 14 et un pour mercredi 16 mais rien pour mardi 15 alors c'est que l'evênement ne s'est pas produit.... Ou peut-être j'ai tout faux, et je dois partir sur une autre idée....

    Enfin et juste pour information, je n'ai pas implémenté la base de données ^^.
    Voilà j'espère avoir été clair. Un grand merci d'avance à celui qui saura m'éclairer .

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Pour être un peu plus clair. Je dois en gros faire une comparaison de deux tables. La partie compliquée est que je dois extrapoler les informations ne se trouvant pas dans une de ces tables.

    Example sans se préoccuper des heures mais juste des jours:

    Table B (évènements attendus) On ne donne que le numéro du jour de la semaine auquel l'event est attendu, pas de date !
    Event1 attendu le Lundi, Mardi et Vendredi de chaque semaine (de chaque mois).
    Table A (évènements s'étant produit)
    Event1 s'est produit Lundi 01/04, Mardi 02/04, Mercredi 03/04, vendredi 05/04, Lundi 08/04, Vendredi 12/04

    Et donc moi je veux Event1 était attendu tous les mardis et donc également le Mardi 09/04 mais ne s'est pas produit.

    Selon moi je dois faire une comparaison séquentielle des deux tables ordonnées par event et ensuite par timestamp (ou day et time pour l'autre table) et dès que je vois que 05/04 s'est produit lundi (jour = 1 grace à la fonction WEEKDAY()+1) et vendredi ==> je dois extrapoler le fait qu'un jour au milieu (mardi) est manquant dans la table des event réalisés ==> l'event ne s'est pas produit.

    Voilà en espérant avoir été plus clair peut-être et surtout avoir quelques réponses ^^

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    OK j'y suis arrivé par moi-même et effectivement je suis parti sur une autre idée que l'idée originale.
    J'ai pas la query sous la main mais en gros:

    - J'ai fait un join entre la tableB et toutes les dates (DISTINCT) depuis maintenant jusqu'à un certain moment (voulu) dans le passé (en fonction du jour de la semaine de cette date (weekday() function)) et j'obtiens donc n rangées (n semaines) pour chaque entrée de la table B.
    - ensuite un deuxième join entre ce résultat-là et la tableA en fonction des timestamps créés just avant et je ne prends que les entrées pour lesquelles les timestamps de A = null dans la jointure.

    Si j'y pense, je repasserai pour mettre ma query, ce sera peut-être plus clair
    Bref en tous cas c'est résolu.

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

Discussions similaires

  1. [2008] Left Outer Join entre deux mêmes tables
    Par jslpfasc2 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 10/03/2014, 16h10
  2. [MySQL] Join SQL entre deux table (expects parameter..)
    Par noyuw dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/03/2011, 18h02
  3. join entre deux tables
    Par nour111 dans le forum SQL
    Réponses: 13
    Dernier message: 21/01/2011, 11h33
  4. Récuperer différence entre deux tables avec JOIN
    Par Takumi dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/08/2009, 22h59
  5. Inner Join entre deux tables SQL avec VB6
    Par Astragale dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/02/2009, 19h35

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