Ich habe einen Datensatz (Beispiel 5 Felder) wie folgt.
Startdatum | Zeit | Nummer 1 | Nummer 2 | Schlüssel 1 | Schlüssel 2 |
---|---|---|---|---|---|
21. November 2022 | 0:01 | 1668969012 | 413027032418217 | B3B820CE | |
21. November 2022 | 0:02 | B3B820CE | |||
21. November 2022 | 0:03 | 1668969013 | 413027032418218 | 8EFCB769 | |
21. November 2022 | 0:04 | 8EFCB769 | |||
21. November 2022 | 0:05 | 1668969014 | 413027032418219 | 4070A788 |
Wie Sie sehen k?nnen, k?nnen die ersten beiden Zeilen und die letzten beiden Zeilen mithilfe der Zeichenfolgen in Schlüssel1 und Schlüssel2 gekoppelt werden. Für das letzte Feld gibt es jedoch kein passendes Feld.
Grunds?tzlich muss ich diese Paare zuordnen und eine neue Tabelle erstellen, wie unten gezeigt.
Startdatum | Zeit | Enddatum | Zeit | Nummer 1 | Nummer 2 |
---|---|---|---|---|---|
21. November 2022 | 0:01 | 21. November 2022 | 0:02 | 1668969012 | 413027032418217 |
21. November 2022 | 0:03 | 21. November 2022 | 0:04 | 1668969013 | 413027032418218 |
21. November 2022 | 0:05 | 1668969014 | 413027032418219 |
Das habe ich bisher versucht. Aber das bietet nicht das, was ich brauche. Kann mir jemand sagen, was hier der Fehler ist?
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
錯誤很簡單 - INNER JOIN 將僅選擇完整的對。
您必須在單獨(dú)的子查詢中收集所有鍵值,然后將數(shù)據(jù)加入其中。
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