Comment puis-je joindre deux tables avec différents nombre de lignes dans MySQL?
J'ai deux tables qui je veux me connecter.
TABLE_A:
+-----------+-----------+---------+
| row_id | category | val_1 |
+-----------+-----------+---------+
| 1067 | cat1 | 6.5 |
| 2666 | test | 6.5 |
| 2710 | cat1 | 2.1 |
| 2710 | test | 7.1 |
| 2767 | test | 3 |
| 71142 | cat1 | 5 |
| 50666 | other | 6.5 |
| 71142 | other | 1 |
| 345342 | cat1 | 6.5 |
| 345342 | test | 2.8 |
+-----------+-----------+---------+
TABLE_B:
+-----------+-----------+
| row_id | val_2 |
+-----------+-----------+
| 1067 | 2.0 |
| 2666 | 9 |
| 2701 | 2.2 |
| 2708 | 1 |
| 2709 | 6.5 |
| 2710 | 5.2 |
| 2765 | 6.5 |
| 2766 | 15 |
| 2767 | 8 |
| 71142 | 5 |
| 2783 | 4.5 |
| 50666 | 6.5 |
| 101588 | 9 |
| 101588 | 3 |
| 3452 | 8.0 |
| 23422 | 5 |
| 345342 | 6.5 |
+-----------+-----------+
RESULT_TABLE:
+-----------+-----------+-----------+------------+
| row_id | val_2 | val_1 | category |
+-----------+-----------+-----------+------------+
| 1067 | 2.0 | 6.5 | cat1 |
| 2666 | 9 | 6.5 | test |
| 2701 | 2.2 | 2.2 | NULL |
| 2708 | 1 | 1 | NULL |
| 2709 | 6.5 | 1 | NULL |
| 2710 | 5.2 | 2.1 | cat1 |
| 2710 | 5.2 | 7.1 | test |
| 2765 | 6.5 | 1 | NULL |
| 2766 | 15 | 1 | NULL |
| 2767 | 8 | 3 | test |
| 71142 | 5 | 5 | cat1 |
| 71142 | 5 | 1 | other |
| 2783 | 4.5 | 1 | NULL |
| 50666 | 6.5 | 6.5 | other |
| 101588 | 9 | 1 | NULL |
| 101588 | 3 | 1 | NULL |
| 3452 | 8.0 | 1 | NULL |
| 23422 | 5 | 1 | NULL |
| 345342 | 6.5 | 6.5 | cat1 |
| 345342 | 6.5 | 2.8 | test |
+-----------+-----------+-----------+------------+
J'ai essayé d'utiliser quelque chose comme ceci:
SELECT TABLE_A.row_id, TABLE_A.category, TABLE_A.val_1, TABLE_B.val_2
FROM TABLE_A
INNER JOIN TABLE_B ON TABLE_B.row_id = TABLE_A.row_id
ORDER BY row_id;
Cependant, les résultats comprennent uniquement les lignes où le row_id
colonne existe dans TABLE_A.
Est il y a moyen de se connecter TABLE_A et TABLE_B pour produire le résultat montré dans RESULT_TABLE?
Essayez un full join au lieu.
OriginalL'auteur BlueMark | 2009-11-24
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez que tous les résultats, vous avez besoin d'un extérieur rejoindre, pas un intérieure un. (Intérieure renvoie uniquement les lignes où il y a un match; externe renvoie toutes les lignes, avec les lignes correspondantes "assemblées")
OriginalL'auteur Jason Williams
Essayer une jointure externe.
OriginalL'auteur baleful
Cela devrait le faire:
La
RIGHT OUTER JOIN
tire tous les enregistrements de Table_B même si elles n'existent pas dans Table_A, et laFUSIONNER
déclaration est une fonction qui retourne son premier non-NULL en paramètre. Dans ce cas, si il n'existe pas de valeur dans Table_A, il sera de retour1
, qui est ce que votre exemple des listes de résultats, comme la sortie souhaitée.OriginalL'auteur Welbog