如何透過不同列中可以為 NULL 的鍵將表連接到自身
P粉448346289
P粉448346289 2023-09-09 11:27:14
0
1
565

我有一個資料集(範例 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粉448346289
P粉448346289

全部回覆(1)
P粉278379495

錯誤很簡單 - 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!