Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menggunakan tiga jadual untuk melaksanakan operasi FULL OUTER JOIN dalam MySQL?

<p>考虑以下表:</p> <pre class="lang-sql prettyprint-override"><kod>buat jadual `t1` ( `tarikh` tarikh, `nilai` int ); buat jadual `t2` ( `tarikh` tarikh, `nilai` int ); buat jadual `t3` ( `tarikh` tarikh, `nilai` int ); masukkan ke dalam `t1` (`tarikh`, `nilai`) nilai ("2022-01-01", 1), ("2022-03-01", 3), ("2022-04-01", 4); masukkan ke dalam `t2` (`tarikh`, `nilai`) nilai ("2022-01-01", 1), ("2022-02-01", 2), ("2022-04-01", 4); masukkan ke dalam `t3` (`tarikh`, `nilai`) nilai ("2022-01-01", 1), ("2022-02-01", 2), ("2022-03-01", 3); </code></pre> <p><kod>t1</kod>表缺少<kod>2022-02-01</kod>日期,<kod>t2</kod>缺少-0<0 /kod>,<kod>t3</kod>缺少<kod>2022-04-01</kod>。我想要将这三个表:连接亷来这三个表:连接亷束/p gt; <pre class="brush:php;toolbar:false;">| t1.tarikh | t1.nilai | t2.tarikh | t2.nilai | t3.tarikh | t3.nilai | | | | | | | | | 2022-01-01 | 1 | 2022-01-01 | 1 | 2022-01-01 | 1 | | null | null | 2022-02-01 | 2 | 2022-02-01 | 2 | | 2022-03-01 | 3 | null | null | 2022-03-01 | 3 | | 2022-04-01 | 4 | 2022-04-01 | 4 | null | null |</pre> <p>我知道如何在两个表之间进行<kod>sambungan luar penuh</kod>,但是在三个或更多集。我尝试了像这样的查询,但没有产生我想要的结果:</p> <pre class="lang-sql prettyprint-override"><kod>pilih * daripada `t1` kiri sertai `t2` pada `t2`.`date` = `t1`.`date` kiri sertai `t3` pada `t3`.`date` = `t2`.`date` atau `t3`.`date` = `t1`.`date` kesatuan pilih * daripada `t1` sambung kanan `t2` pada `t2`.`date` = `t1`.`date` cantumkan kanan `t3` pada `t3`.`date` = `t2`.`date` atau `t3`.`date` = `t1`.`date`; </code></pre></p>
P粉852114752P粉852114752435 hari yang lalu520

membalas semua(1)saya akan balas

  • P粉176203781

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

    Anda berada di landasan yang betul, tetapi anda perlu mempertimbangkan semua kombinasi - 3 jadual - 4 klausa kesatuan.

    -- 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`

    balas
    0
  • Batalbalas