gpt4 book ai didi

sqlite - 第二个表中行数有限的 INNER JOIN

转载 作者:行者123 更新时间:2023-12-03 15:45:26 24 4
gpt4 key购买 nike

我有两个表:[TEXT]、[CATEGORY]
每个文本项都有一个类别
以下 sql 语句检索具有“艺术”类别的文本项

SELECT * from [TEXT], [CATEGORY] WHERE [CATEGORY].[id]=[TEXT].[CATEGORY_id] AND
[CATEGORY].[name] IN ("Art") LIMIT 10

我想要做的是从每个类别中检索 10 个文本项。

10 来自艺术,10 来自哲学,10 来自科学......

最佳答案

假设你真的指的是 MySQL,最快的解决方案涉及变量:

select t.*
from (SELECT *,
@rn := if(@cname = c.name, @rn + 1, 1) as rn
@cname := c.name
from `TEXT` t join
CATEGORY c
on c.id = t.CATEGORY_id cross join
(select @cname := '', @rn := 0) const
order by c.name
) t
where rn <= 10;

我特别不喜欢这个解决方案,因为 MySQL 不保证分配给 @rn发生在分配给 @cname 之前.但是,它在实践中确实有效。

编辑:

以上在 MySQL 中有效。在 SQLite 中,您需要使用查询进行计数:
select t.*
from (SELECT *,
(select count(*) from Text t2 where t2.Category_id = t.Category_Id and t2.id <= t.id
) as seqnum
from TEXT t join
CATEGORY c
on c.id = t.CATEGORY_id
) t
where seqnum <= 10;

这实际上是标准的 SQL,但通常性能不是很好,因此首选其他替代方案。

注意:这假设在 Text 中有一些列标识每一行。我叫它 id .

关于sqlite - 第二个表中行数有限的 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com