使用 DISTINCT 和 LIMIT 的子查询
subquery using DISTINCT and LIMIT
在 SQLite 中,当我这样做时
SELECT DISTINCT idvar
FROM myTable
LIMIT 100
OFFSET 0;
数据 returned 是 100 行,myTable
中 idvar
的(第一个)100 个不同值。这正是我所期望的。
现在,当我这样做时
SELECT *
FROM myTable
WHERE idvar IN (SELECT DISTINCT idvar
FROM myTable
LIMIT 100
OFFSET 0);
我希望 myTable
中的所有数据都对应于 idvar
的那 100 个不同的值(因此 returned 的数据可能有超过 100 行,如果有的话每个 idvar
不止一行)。然而,我得到的是 idvar
的许多不同值的所有数据,即 return 或多或少 100 行。我不明白为什么。
想法?我应该如何构建符合我预期的 return 查询?
上下文
我有一个 50GB table,我需要使用 R 进行一些计算。由于内存原因,我不可能将那么多数据加载到 R ,我想分批工作。然而,重要的是每个块包含给定级别 idvar
的所有行。这就是为什么我在查询中使用 OFFSET 和 LIMIT,并试图确保它 return 是 idvar
.
级别的所有行
我不确定 SQLite,但在其他 SQL 变体中,未排序的 LIMIT 查询的结果不能保证每次都是 return 相同的结果。因此,您还应该在其中包含 ORDER BY。
但更好的想法可能是在开始时进行单独的查询,将所有不同的 ID 读入 R。然后将它们分成 100 个批次,然后对每个批次进行单独的查询。应该更清晰、更快速、更容易调试。
编辑:示例 R 代码。假设您在变量 ids
.
中有 100k 个不同的 ID
for (i in 1:1000) {
tmp.ids <- ids[((i - 1) * 100 + 1) : (i * 100)]
query <- paste0("SELECT * FROM myTable WHERE idvar IN (",
paste0(tmp.ids, collapse = ", "),
")")
dbSendquery(con, query)
fetch results, etc..
}
在 SQLite 中,当我这样做时
SELECT DISTINCT idvar
FROM myTable
LIMIT 100
OFFSET 0;
数据 returned 是 100 行,myTable
中 idvar
的(第一个)100 个不同值。这正是我所期望的。
现在,当我这样做时
SELECT *
FROM myTable
WHERE idvar IN (SELECT DISTINCT idvar
FROM myTable
LIMIT 100
OFFSET 0);
我希望 myTable
中的所有数据都对应于 idvar
的那 100 个不同的值(因此 returned 的数据可能有超过 100 行,如果有的话每个 idvar
不止一行)。然而,我得到的是 idvar
的许多不同值的所有数据,即 return 或多或少 100 行。我不明白为什么。
想法?我应该如何构建符合我预期的 return 查询?
上下文
我有一个 50GB table,我需要使用 R 进行一些计算。由于内存原因,我不可能将那么多数据加载到 R ,我想分批工作。然而,重要的是每个块包含给定级别 idvar
的所有行。这就是为什么我在查询中使用 OFFSET 和 LIMIT,并试图确保它 return 是 idvar
.
我不确定 SQLite,但在其他 SQL 变体中,未排序的 LIMIT 查询的结果不能保证每次都是 return 相同的结果。因此,您还应该在其中包含 ORDER BY。
但更好的想法可能是在开始时进行单独的查询,将所有不同的 ID 读入 R。然后将它们分成 100 个批次,然后对每个批次进行单独的查询。应该更清晰、更快速、更容易调试。
编辑:示例 R 代码。假设您在变量 ids
.
for (i in 1:1000) {
tmp.ids <- ids[((i - 1) * 100 + 1) : (i * 100)]
query <- paste0("SELECT * FROM myTable WHERE idvar IN (",
paste0(tmp.ids, collapse = ", "),
")")
dbSendquery(con, query)
fetch results, etc..
}