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

就是这样。我得到了标题,但没有行。我不知道我做错了什么……我怀疑这可能与我使用 like 运算符的方式有关,但我不知道。任何帮助将非常感激。

原文由 japem 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 415
2 个回答

抛开一些奇怪的数据模型不谈,您已经在 LIKE 部分中翻转了表格(table1.name 应该是 table2.name 的一部分,而不是相反),并且您需要将百分比添加到 value 中,而不是字段的 _名称_,这意味着不引用名称;

 SELECT table1.*, table2.z
FROM table1
INNER JOIN table2
  ON table2.name LIKE CONCAT('%', table1.name, '%')
 AND table1.year = table2.year

一个用于测试的 SQLfiddle

原文由 Joachim Isaksson 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试这个:

 Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like Concat('%',Table2.Name,'%') and Table1.Year=Table2.Year

在您的查询中,它将搜索包含 Table2.Name 的字符串(就像常量一样)

作为一个名字加入的建议是非常非常糟糕的,如果你有两个同名的人怎么办??!所以你需要有一个主键和外键。

原文由 Reza 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进