sql - 在路径枚举的情况下,SQL 的 LIKE 如何工作?

标签 sql sql-like

我正在看书SQL Antipatterns像这样使用 SQL 查询的地方:

SELECT *
FROM Comments AS c
WHERE '1/4/6/7/' LIKE c.path || '%';

从这个表中找到评论 #7 的祖先:

enter image description here

我不太熟悉用于 LIKE 的正则表达式,希望了解它的工作原理。具体来说,文字 '1/4/6/7' 位于 LIKE 关键字的左侧是否重要?整个 WHERE 谓词如何工作(即 || '%')?

最佳答案

首先,如果不是很清楚,||就是字符串连接操作符。所以,如果 c.path 的值为 '1/',那么 c.path || “%” 产生 “1/%”

所以,很明显,你不能做 WHERE field LIKE 'constant%' 因为在这种特殊的(奇怪的)查询中,常量可能比字段长,而不是另一个一路走来。

通常,我们对LIKE做的就是WHERE field LIKE 'constant%',检查字段的值是否以常量开头。这里查询的作者想看看常量是否以字段的值开头,这是一件奇怪的事情。

关于sql - 在路径枚举的情况下,SQL 的 LIKE 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45127014/

相关文章:

LIKE CONCAT 中的 MySQL 子查询

php - 选择在包含多个以逗号分隔的 id 的列中搜索某个 id 的行

sql - 键列和非键列的区别

java - 从实体获取或创建插入语句

mysql - 为什么在我的查询中使用 LIMIT 时 MySQL 很慢?

mysql - SQL 查询性能 LIKE 和通配符与 IN

MySQL LIKE 模式匹配在应该返回值时返回空集

mysql - SQL : get substring from one column and inserting it into other column

MySQL - 检索具有最大值的记录

mysql - Like语句的缓存和加速解决方案