我做了很多搜索,但找不到编写这个sql的方法。 我有一个mysql数据库,其中包含各种长度的文本。我想选择10个文本,我希望这10个文本的长度之和在一些长度或字符长度标准之间。 可能吗? 子查询可能吗?
或者像这样:
SELECT text
FROM tablename AS result
WHERE CHAR _LENGHT (result) BETWEEN min AND max
ORDER BY RAND ( ) LIMIT 10
由于别名未被CHAR_LENGTH接受,因此不起作用。
答案 0 :(得分:2)
这在SQL中是可能的,但既不简单也不推荐。基本上,你需要做10个连接。
让我举三个例子,假设您不需要重复:
select t1.text, t2.text, t3.text
from t t1 join
t t2
on t1.text < t2.text
t t3
on t2.text < t3.text
where length(t1.text) + length(t2.text) + length(t3.text) = ?
问题是,这考虑了所有可能性 - 基本上做了一个巨大的笛卡尔积。即使表中有几十行,查询也可能无法完成10个表。
答案 1 :(得分:0)
这与戈登相同 我以为我可以做一个递归的CTE工作,但不能
declare @len table (iden int IDENTITY(1,1) primary key, tlen int);
insert into @len(tlen) values (1), (2), (3), (4), (5), (6), (12), (11), (10), (9), (8), (7);
--select * from @len order by iden;
select l1.tlen, l2.tlen, l3.tlen
from @len l1
join @len l2
on l2.tlen > l1.tlen
join @len l3
on l3.tlen > l2.tlen
where l1.tlen + l2.tlen + l3.tlen = 15
order by l1.tlen, l2.tlen, l3.tlen;