SQL在列上加入LIKE另一列[重复]
Posted
技术标签:
【中文标题】SQL在列上加入LIKE另一列[重复]【英文标题】:SQL Join on a column LIKE another column [duplicate] 【发布时间】:2013-01-19 17:54:12 【问题描述】:可能重复:mysql join query using like?
我想做一个连接,其中一列包含另一个表列中的字符串:
SELECT
a.first_name,
b.age
FROM names a
JOIN ages b
ON b.full_name LIKE '%a.first_name%'
这可能吗?我正在使用 MySQL。当然,上面的查询不会起作用,因为 LIKE '%a.first_name%' 只会查找字符串 a.first_name,而不是列的实际值。
【问题讨论】:
如果你在字符串的开头有一个 % ,它将无法使用你在那个 b.full_name 列上的任何索引。只是让你知道,如果你在这里有一个相当大的数据库,你的表现会很糟糕。 你会得到你想要的。所以如果名字是 Jo,你会得到 josephine、josiline、jobob、jody、joseph 等。 【参考方案1】:你只需要连接字符串,你也可以做一个搜索和替换。
SELECT
a.first_name,
b.age
FROM names a
JOIN ages b
ON b.full_name LIKE '%' + a.first_name + '%'
【讨论】:
使用ON b.full_name LIKE CONCAT('%', a.first_name, '%')
对我来说效果更好
此解决方案适用于 SQL Server,而非 MYSQL【参考方案2】:
您可以使用 CONCAT:
SELECT
a.first_name,
b.age
FROM
names a JOIN ages b
ON b.full_name LIKE CONCAT('%', a.first_name, '%')
或者LOCATE,返回a.first_name
在b.full_name
中第一次出现的位置:
SELECT
a.first_name,
b.age
FROM
names a JOIN ages b
ON LOCATE(a.first_name, b.full_name)
如果有匹配,则连接成功。
【讨论】:
LOCATE() 很有趣,当字符串存在于 b.full_name 中时会返回非零值,否则返回 false? @DonnyP locate 将返回 0 如果没有匹配,或者第一次出现名字的位置。 0 被认为等同于 False,如果值 >=1 则被认为是 True以上是关于SQL在列上加入LIKE另一列[重复]的主要内容,如果未能解决你的问题,请参考以下文章