MySQL:如何使用CASE,或者是否匹配较短列的长度?
我想匹配名称列,但其中一些列包含名字的昵称,因此我想做一些事情,使用substring_index查找名字,无论哪个表的名字较短(例如Zach vs Zachary),我都会匹配较短名字的长度。在那之后,我匹配了他们姓氏的最后四个字母,我没有包括在下面。现在,它给了我一个接近字符长度的错误MySQL:如何使用CASE,或者是否匹配较短列的长度?,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我想匹配名称列,但其中一些列包含名字的昵称,因此我想做一些事情,使用substring_index查找名字,无论哪个表的名字较短(例如Zach vs Zachary),我都会匹配较短名字的长度。在那之后,我匹配了他们姓氏的最后四个字母,我没有包括在下面。现在,它给了我一个接近字符长度的错误 SELECT a.name, b.name FROM a, b WHERE IF ( a.name < b.name) THEN a.name = SUBSTRING(b.na
SELECT a.name, b.name
FROM a, b
WHERE IF (
a.name < b.name)
THEN
a.name = SUBSTRING(b.name, 1, char_length(a.name))
ELIF (
b.name < a.name)
THEN
b.name = SUBSTRING(a.name, 1, CHAR_LENGTH(b.name))
选择a.name,b.name
从a到b
如果(
a、 名称
选择案例时
字符长度(a.name)<字符长度(b.name)
然后
SUBSTR(b.name,1,字符长度(a.name))
其他的
SUBSTR(a.name,1,字符长度(b.name))
结束
从a到b
切换到现代的显式JOIN
语法
使用LIKE
两次,查找以b-名称开头的a-名称,或以a-名称开头的b-名称
SELECT a.name, b.name
FROM a
JOIN b
ON a.name like concat(b.name, '%') or b.name like concat(a.name, '%')
请提供示例数据和所需结果。必需链接:。Bob、Tom、Dave、Bill和Sue认为您的方法有缺陷。今天的提示:切换到现代的显式
JOIN
语法。更易于写入(无错误),更易于读取(和维护),并且在需要时更易于转换为外部联接。
SELECT a.name, b.name
FROM a
JOIN b
ON a.name like concat(b.name, '%') or b.name like concat(a.name, '%')