Comment joindre une table à elle-même par des clés dans différentes colonnes pouvant être NULL
P粉448346289
P粉448346289 2023-09-09 11:27:14
0
1
564

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粉448346289
P粉448346289

répondre à tous(1)
P粉278379495

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!