"像" SQL中内连接的运算符

时间:2014-04-24 17:55:41

标签: sql join sql-like

使用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

就是这样。我得到了标题,但没有排。我不知道自己做错了什么......我怀疑这可能与我使用类似运营商的方式有关,但我不知道。任何帮助将不胜感激。

3 个答案:

答案 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

An SQLfiddle to test with

答案 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个同名的人怎么办?所以你需要有一个主键和外键。