如何在子查询的别名上使用 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/