recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment utiliser trois tables pour effectuer une opération FULL OUTER JOIN dans MySQL ?

<p>考虑以下表:</p> <pre class="lang-sql Prettyprint-override"><code>créer la table `t1` ( 'date' date, `valeur` entier ); créer la table `t2` ( 'date' date, `valeur` entier ); créer la table `t3` ( 'date' date, `valeur` entier ); insérer dans `t1` (`date`, `value`) valeurs ("2022-01-01", 1), ("2022-03-01", 3), ("2022-04-01", 4); insérer dans `t2` (`date`, `value`) valeurs ("2022-01-01", 1), ("2022-02-01", 2), ("2022-04-01", 4); insérer dans `t3` (`date`, `value`) valeurs ("2022-01-01", 1), ("2022-02-01", 2), ("2022-03-01", 3); </code></pre> <p><code>t1</code>表缺少<code>2022-02-01</code>日期,<code>t2</code>缺少<code>2022-03-01< /code>,<code>t3</code>缺少<code>2022-04-01</code>。我想要将这三个表连接起来,产生以下结果:</p& gt; <pre class="brush:php;toolbar:false;">| t1.date | t1.valeur | t2.date | t2.valeur | t3.date | t3.valeur | | | | | | | | | 2022-01-01 | 1 | 2022-01-01 | 1 | 2022-01-01 | 1 | | nul | nul | 2022-02-01 | 2 | 2022-02-01 | 2 | | 2022-03-01 | 3 | nul | nul | 2022-03-01 | 3 | | 2022-04-01 | 4 | 2022-04-01 | 4 | nul | null |</pré> <p>我尝试了像这样的查询,但没有产生我想要的结果:</p> <pre class="lang-sql Prettyprint-override"><code>select * de 't1' rejoindre à gauche `t2` sur `t2`.`date` = `t1`.`date` rejoindre à gauche `t3` sur `t3`.`date` = `t2`.`date` ou `t3`.`date` = `t1`.`date` syndicat sélectionner * de 't1' rejoindre à droite `t2` sur `t2`.`date` = `t1`.`date` rejoindre à droite `t3` sur `t3`.`date` = `t2`.`date` ou `t3`.`date` = `t1`.`date` ; </code></pre></p>
P粉852114752P粉852114752508 Il y a quelques jours569

répondre à tous(1)je répondrai

  • P粉176203781

    P粉1762037812023-09-02 18:31:10

    Vous êtes sur la bonne voie, mais vous devez considérer toutes les combinaisons - 3 tableaux - 4 clauses d'union.

    -- t1与t2进行全连接
    select *
    from `t1`
    left join `t2` on `t2`.`date` = `t1`.`date` 
    union 
    select *
    from `t1`
    right join `t2` on `t2`.`date` = `t1`.`date` 
    
    -- t1与t3进行全连接
    union 
    select *
    from `t1`
    left join `t3` on `t3`.`date` = `t1`.`date` 
    
    union 
    select *
    from `t1`
    right join `t3` on `t3`.`date` = `t1`.`date`

    répondre
    0
  • Annulerrépondre