Maison > Questions et réponses > le corps du texte
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粉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