首页 > 解决方案 > Sqlite 从两个表中选择并按限制排序

问题描述

SELECT y.M_id,SUM(t.alarm_sum),y.yarn1,AVG(t.yarn1_in),SUM(t.yarn1_alarm)
FROM '111' t, yarn y 
WHERE t.date=date('now') AND y.M_id='111' 
ORDER BY t.row_id DESC 
LIMIT 5 

我想从 2 个表中获取数据:'111' 和纱线,但我只想要来自 '111' 的最后 5 行数据。我运行了它,但输出不受“111”表中的 5 行限制。需要改变什么?

标签: sqlsqlite

解决方案


您可以使用子查询,例如

select ...
from (select * from '111' order by row_id desc limit 5) t,
     yarn y
[...]

但是,我不清楚这是否有意义,也不清楚您要达到什么目的。

您在这里所做的是笛卡尔连接:从功能上讲,数据库将选择 t 的所有行,y 的所有行,创建两者的每个组合(因此它将创建 t 的第一行与所有 y 的组合, t 是所有 y, ...) 的第二行,然后它将根据您的条件进行过滤,最后是 order 和 limit。

我很惊讶你从 t 得到的除了最后一行之外的任何东西。

(在 sqlite 中也调用列row_id似乎是个坏主意,因为它很容易与数据库自己的rowid混淆)。


推荐阅读