Heim > Fragen und Antworten > Hauptteil
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
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