En utilisant Sequel Pro, j'ai ces deux tableaux:
Table1
Name Year x y
John Smith 2010 10 12
Adam Jones 2010 8 13
John Smith 2011 7 15
Adam Jones 2011 9 14
etc.
et
Table2
Name Year z
Smith John Smith John 2010 27
Jones Adam Jones Adam 2010 25
Smith John Smith John 2011 29
Jones Adam Jones Adam 2011 21
etc.
Fondamentalement, les noms du tableau 2 sont les mêmes uniquement avec le nom et le prénom commutés, puis répétés une fois. Ainsi, les noms dans Table1 se trouvent dans les noms de Table2 ("John Smith" se trouve dans "Smith John Smith John"). Je veux effectuer une jointure interne et connecter la valeur z de Table2 aux autres valeurs de Table1 et obtenir quelque chose comme ceci:
Name x y z
John Smith 10 12 27
Adam Jones 8 13 25
Pour ce faire, j'ai exécuté cette requête:
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like "%Table2.Name%" and Table1.Year=Table2.Year
Mais je l'ai obtenu comme sortie:
Name Year x y z
Et c'est tout. J'ai eu les titres, mais pas de lignes. Je ne sais pas ce que je fais mal ... Je soupçonne que cela a probablement à voir avec la façon dont j'utilise l'opérateur similaire, mais je ne sais pas. Toute aide serait très appréciée.
Mis à part un modèle de données étrange, vous avez inversé les tables dans la partie LIKE
(table1.name devrait faire partie de table2.name, et non l'inverse), et vous devez ajouter les pourcentages à la valeur , pas le nom du champ, qui signifie ne pas citer le nom;
SELECT table1.*, table2.z
FROM table1
INNER JOIN table2
ON table2.name LIKE CONCAT('%', table1.name, '%')
AND table1.year = table2.year
Votre requête est incorrecte, vous dites que le contenu de la colonne doit être comme abcdTable2.Nameefgh
. Ce serait correct:
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like "%" + Table2.Name+ "%" and Table1.Year=Table2.Year
Cette requête sera assez lente pour une table plus grande, mais je crains que si vous vous joignez à un nom uniquement, la table ne peut pas vraiment être plus grande car vous aurez bientôt des doublons.
essaye ça:
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like Concat('%',Table2.Name,'%') and Table1.Year=Table2.Year
dans votre requête, il recherchera une chaîne contenant Table2.Name
(c'est comme constant)
comme suggestion de joindre des noms est très très mauvais, et si vous avez 2 personnes avec le même nom ??! Vous devez donc disposer d'une clé primaire et étrangère pour cela.