Maison  >  Questions et réponses  >  le corps du texte

Comment joindre une table à elle-même par des clés dans différentes colonnes pouvant être NULL

J'ai un ensemble de données (exemple 5 champs) comme suit.

Date de début Heure Numéro 1 Numéro 2 Clé 1 Clé 2
21 novembre 2022 0:01 1668969012 413027032418217 B3B820CE
21 novembre 2022 0:02 B3B820CE
21 novembre 2022 0:03 1668969013 413027032418218 8EFCB769
21 novembre 2022 0:04 8EFCB769
21 novembre 2022 0:05 1668969014 413027032418219 4070A788

Comme vous pouvez le voir, les deux premières lignes et les deux dernières lignes peuvent être couplées en utilisant les chaînes de key1 et key2. Mais pour le dernier champ, il n’y a pas de champ correspondant.

En gros, je dois faire correspondre ces paires et créer un nouveau tableau comme indiqué ci-dessous.

Date de début Heure Date de fin Heure Numéro 1 Numéro 2
21 novembre 2022 0:01 21 novembre 2022 0:02 1668969012 413027032418217
21 novembre 2022 0:03 21 novembre 2022 0:04 1668969013 413027032418218
21 novembre 2022 0:05 1668969014 413027032418219

C'est ce que j'ai essayé jusqu'à présent. Mais cela ne fournit pas ce dont j'ai besoin. Quelqu'un peut-il me dire quelle est l'erreur ici ?

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 Il y a quelques jours567

répondre à tous(1)je répondrai

  • P粉278379495

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

    L'erreur est simple : INNER JOIN ne sélectionnera que des paires complètes.

    Vous devez collecter toutes les valeurs clés dans une sous-requête distincte, puis y joindre les données.

    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

    Si la même valeur dans key1 值始终存在,而 key2 n'existe pas, alors vous pouvez utiliser un simple 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

    répondre
    0
  • Annulerrépondre