Heim  >  Fragen und Antworten  >  Hauptteil

So verknüpfen Sie eine Tabelle mit sich selbst durch Schlüssel in verschiedenen Spalten, die NULL sein können

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粉448346289P粉448346289380 Tage vor570

Antworte allen(1)Ich werde antworten

  • 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

    Antwort
    0
  • StornierenAntwort