Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:如何使用CASE,或者是否匹配较短列的长度?_Mysql_Sql_Mysql Workbench - Fatal编程技术网

MySQL:如何使用CASE,或者是否匹配较短列的长度?

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

我想匹配名称列,但其中一些列包含名字的昵称,因此我想做一些事情,使用substring_index查找名字,无论哪个表的名字较短(例如Zach vs Zachary),我都会匹配较短名字的长度。在那之后,我匹配了他们姓氏的最后四个字母,我没有包括在下面。现在,它给了我一个接近字符长度的错误

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, '%')