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
519

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 danskey1值始终存在,而key2n'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!