使用Sequel Pro,我有两个表:
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.
和
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.
基本上,表2中的名称仅与姓氏和名字切换相同,然后重复一次。所以Table1中的名字可以在Table2的名字中找到(" John Smith"在" Smith John Smith John"中找到)。我想执行内连接并将Table2的z值连接到Table1的其他值并得到如下内容:
Name x y z
John Smith 10 12 27
Adam Jones 8 13 25
为此,我运行了这个查询:
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like "%Table2.Name%" and Table1.Year=Table2.Year
但我把它作为输出:
Name Year x y z
就是这样。我得到了标题,但没有排。我不知道自己做错了什么......我怀疑这可能与我使用类似运营商的方式有关,但我不知道。任何帮助将不胜感激。
答案 0 :(得分:28)
除了一些奇怪的数据模型之外,您已经在LIKE
部分转换了表格(table1.name应该是table2.name的一部分,而不是相反),以及您需要将百分比添加到值,而不是字段的名称,这意味着不引用名称;
SELECT table1.*, table2.z
FROM table1
INNER JOIN table2
ON table2.name LIKE CONCAT('%', table1.name, '%')
AND table1.year = table2.year
答案 1 :(得分:5)
您的查询不正确,您说该列的内容应该与abcdTable2.Nameefgh
类似。这是正确的:
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like "%" + Table2.Name+ "%" and Table1.Year=Table2.Year
这个查询对于更大的表来说会非常慢,但我担心如果你只加入一个名字,那么这个表就不会那么大,因为你很快会有重复的表。
答案 2 :(得分:3)
试试这个:
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like Concat('%',Table2.Name,'%') and Table1.Year=Table2.Year
在您的查询中,它将搜索包含Table2.Name
的字符串(它就像常量)
作为一个建议加入名称非常非常糟糕,如果你有2个同名的人怎么办?所以你需要有一个主键和外键。