我有一个不难解决的问题,但我遇到了问题。
一张小 table
create table tbl1
( a INT AUTO_INCREMENT NOT NULL UNIQUE PRIMARY KEY,
b VARCHAR(100)
);
和一些数据
insert into tbl1
(b) values
("/some/path/1"),
("/some/path/2"),
("/some/longer/path/1"),
("/some/longer/path/2"),
("/some/way/1"),
("/some/longer/way/2");
我想这样查询:
select length(b) - length(replace(b, '/', '')) no_dirs, b
from tbl1
where b like "%path%"
and no_dirs = min(no_dirs);
它应该返回 no_dirs 具有其最小值的所有行。最后一个条件不起作用。
我还摆弄了一个子查询,但无法让它工作。
建议?
最佳答案
您不能在 WHERE
子句中引用 no_dirs
,因为 WHERE
在 SELECT
之前求值子句,所以 no_dirs
还不存在。
你也不能像那样使用MIN
。这是一个带有子查询的解决方案:
SELECT length(b) - length(replace(b, '/', '')) no_dirs, b
FROM tbl1
WHERE b like "%path%"
AND length(b) - length(replace(b, '/', '')) = (
SELECT MIN(length(b) - length(replace(b, '/', '')))
FROM tbl1
WHERE b like "%path%" )
关于mysql - SQL:过滤计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20281898/