Heim  >  Fragen und Antworten  >  Hauptteil

Wie verwende ich drei Tabellen, um den FULL OUTER JOIN-Vorgang in MySQL auszuführen?

<p>考虑以下表:</p> <pre class="lang-sql Prettyprint-override"><code>Tabelle „t1“ erstellen ( „Datum“ Datum, `Wert` int ); Erstellen Sie die Tabelle „t2“ ( „Datum“ Datum, `Wert` int ); Erstellen Sie die Tabelle „t3“ ( „Datum“ Datum, `Wert` int ); Einfügen in „t1“ („Datum“, „Wert“) Werte („01.01.2022“, 1), („01.03.2022“, 3), („01.04.2022“, 4); Einfügen in „t2“ („Datum“, „Wert“) Werte („01.01.2022“, 1), („01.02.2022“, 2), („01.04.2022“, 4); in „t3“ einfügen („Datum“, „Wert“) Werte („01.01.2022“, 1), („01.02.2022“, 2), („01.03.2022“, 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> <pre class="brush:php;toolbar:false;">| t1.date | t1.Wert | t2.date | t2.value | t3.date | t3.value | | | | | | | | | 01.01.2022 | 1 | 01.01.2022 | 1 | 01.01.2022 | 1 | | null | null | 01.02.2022 | 2 | 01.02.2022 | 2 | | 01.03.2022 | 3 | null | null | 01.03.2022 | 3 | | 01.04.2022 | 4 | 01.04.2022 | 4 | null | null |</pre> <p>我知道如何在两个表之间进行<code>vollständiger äußerer Join</code>尝试了像这样的查询,但没有产生我想要的结果:</p> <pre class="lang-sql Prettyprint-override"><code>select * von `t1` linke Verbindung zu `t2` am `t2`.`date` = `t1`.`date` Verknüpfen Sie `t3` mit `t3`.`date` = `t2`.`date` oder `t3`.`date` = `t1`.`date` Union wählen * von `t1` Rechtsverknüpfung „t2“ auf „t2“. „Datum“ = „t1“. „Datum“. rechter Join von `t3` auf `t3`.`date` = `t2`.`date` oder `t3`.`date` = `t1`.`date`; </code></pre></p>
P粉852114752P粉852114752384 Tage vor447

Antworte allen(1)Ich werde antworten

  • P粉176203781

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

    你走在正确的轨道上,但你必须考虑所有的组合 - 3个表 - 4个联合子句。

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

    Antwort
    0
  • StornierenAntwort