首頁  >  問答  >  主體

如何透過不同列中可以為 NULL 的鍵將表連接到自身

我有一個資料集(範例 5 個欄位)如下。

開始日期 時間 數字1 數字2 鍵1 鍵2
2022年11月21日 0:01 1668969012 413027032418217 B3B820CE
2022年11月21日 0:02 B3B820CE
2022年11月21日 0:03 1668969013 413027032418218 8EFCB769
2022年11月21日 0:04 8EFCB769
2022年11月21日 0:05 1668969014 413027032418219 4070A788

正如您所看到的,前兩行和後兩行可以透過使用 key1 和 key2 中的字串進行耦合。但對於最後一個字段,沒有任何符合字段。

基本上我需要匹配這些對並建立一個新表,如下所示。

開始日期 時間 結束日期 時間 數字1 數字2
2022年11月21日 0:01 2022年11月21日 0:02 1668969012 413027032418217
2022年11月21日 0:03 2022年11月21日 0:04 1668969013 413027032418218
2022年11月21日 0:05 1668969014 413027032418219

這是我到目前為止所嘗試的。但這並沒有提供我所需要的。有人可以告訴我這裡的錯誤是什麼嗎?

SELECT 
    t1.start_date_time, t2.start_date_time AS end_date_time, t1.number1, t1.number2
FROM details_all AS t1
    JOIN details_all AS t2
      ON t1.key1 = t2.key2

P粉448346289P粉448346289380 天前566

全部回覆(1)我來回復

  • P粉278379495

    P粉2783794952023-09-10 09:53:30

    錯誤很簡單 - INNER JOIN 將只選擇完整的對。

    您必須在單獨的子查詢中收集所有鍵值,然後將資料加入其中。

    SELECT t1.start_date_time,t2.start_date_time as end_date_time,t1.number1,t1.number2
    FROM ( SELECT key1 AS key FROM table
           UNION                           -- combine columns values and remove duplicates
           SELECT key2 AS key FROM table
           ) all_keys
    LEFT JOIN table t1 ON all_keys.key = t1.key1
    LEFT JOIN table t2 ON all_keys.key = t2.key2

    如果 key1 值始終存在,而 key2 中的相同值可能不存在,那麼您可以使用簡單的 LEFT JOIN:

    SELECT t1.start_date_time,t2.start_date_time as end_date_time,t1.number1,t1.number2
    FROM      table t1
    LEFT JOIN table t2 ON t1.key1 = t2.key2

    回覆
    0
  • 取消回覆