MySQL - 在子查询的别名上使用 REGEXP

标签 mysql regex

如何在子查询的别名上使用 REGEXP?

SELECT 
    colA,
    colB,
    (SELECT colA FROM t2 WHERE t1.colID=t2.colID) as colC
FROM t1
WHERE colC REGEXP '$string'
ORDER BY IF($col = '' OR $col IS NULL,1,0),$col";




如果我再次选择完整的查询,它会起作用,但我发现这会花费一些时间

SELECT * FROM (
    SELECT 
        colA,
        colB,
        (SELECT colA FROM t2 WHERE t1.colID=t2.colID) as colC
    FROM t1
) as temp
WHERE colC REGEXP '$string'
ORDER BY IF($col = '' OR $col IS NULL,1,0),$col";




如果我使用联接并直接引用表字段,则 REGEXP 有效,但该顺序也不适用于别名

SELECT 
    t1.colA AS colA,
    t1.colB AS colB,
    t2.colA AS colC
FROM t1
LEFT JOIN t2 ON t1.colID=t2.colID
WHERE t2.colA REGEXP '$string'
ORDER BY IF($col = '' OR $col IS NULL,1,0),$col";




那么,对完整查询进行选择是执行我需要的操作的唯一方法吗?

最佳答案

您可以使用 HAVING 子句(这不是标准 SQL - MySQL 功能):

SELECT 
    colA,
    colB,
    (SELECT colA FROM t2 WHERE t1.colID=t2.colID) as colC
FROM t1
HAVING colC REGEXP '$string'
ORDER BY IF($col = '' OR $col IS NULL,1,0),$col";

这会对性能产生影响 - 您的联接是一个更好的查询。

关于MySQL - 在子查询的别名上使用 REGEXP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22258078/

相关文章:

regex - 我如何使用 diff 和 sed

mysql - 如何从 mysqldump 恢复转储文件?

java - java中从文本文件中提取信息

python : string split with either A or B

PHP 中的 JavaScript 无法正常工作

带有数组的javascript正则表达式模式

Python:将驼峰大小写转换为使用正则表达式分隔的空格并考虑首字母缩略词

mysql - 问题 - 将 csv 文件导入 Mysql Workbench

linux - fullbackup如何提取单表数据?

python - 如何在Treeview Tkinter中刷新MySQL数据?