mysql - 用于选择多行作为这些行数据的数组的 MySQL 查询
问题描述
有没有办法选择前 3 行,然后选择下 3 行(偏移量 3)并在单个查询中将结果作为两个数组获取?就像是:
(SELECT * FROM product WHERE 1 LIMIT 3) as first_array
(SELECT * FROM product WHERE 1 OFFSET 3 LIMIT 3) as second_array
希望你能理解我。抱歉解释只是不知道如何以其他方式解释。
可以说我只想要 ids - 输出示例:
id_1 id_2
1 4
2 5
3 6
我从帖子下面的答案中尝试过的是:
SELECT id as id_1 FROM `ct_product` WHERE 1 LIMIT 3
UNION ALL
SELECT id as id_2 FROM `ct_product` WHERE 1 LIMIT 3 OFFSET 3
结果对我来说很奇怪。它似乎只返回第二个查询结果,它们不是第 5 行和第 4 行,而是第 5 行和第 6 行和第 3 行(按此顺序)。我的表格行是:
id
1
2
3
4
5
6
7
解决方案
你可以用这个查询来做到这一点:
SELECT a1.id, a2.id
FROM (SELECT *, @rownum1:=@rownum1+1 AS rownum
FROM (SELECT id
FROM `ct_product`
LIMIT 3
) art
JOIN (SELECT @rownum1 := 0) r
) a1
JOIN (SELECT *, @rownum2:=@rownum2+1 AS rownum
FROM (SELECT id
FROM `ct_product`
LIMIT 3, 3
) art
JOIN (SELECT @rownum2 := 0) r
) a2
ON a1.rownum = a2.rownum
输出:
id id
1 4
2 5
3 6
此查询通过使用原始表中的前 3 行和后 3 行人工生成的行号 (@rownum1
和) 创建两个新表来工作。@rownum2
然后将它们加入匹配的行号以获得所需的结果。
推荐阅读
- python - pyspeedtest 找不到测试服务器
- python - ELMo - 如何训练可训练参数
- python - 在 Raspberry Pi 3 上运行 Numba Jit
- database - 我在我的 Mac 上设置了 psql 和 pgadmin。我可以在两者上创建数据库和表,但它们似乎没有连接
- three.js - 如何在three.js中的另一个纹理上加载部分大纹理?
- powerbi - PowerBI / PowerQuery:多个表的日期切片器
- c# - 关闭 Windows 服务时将 cmd 参数传递给正在运行的进程
- coq - Coq 最后出现的“typ”必须将“A”作为第一个参数
- javascript - 同步从 JavaScript 的 Promise 中获取结果
- ios - 我们需要在 cellForRowAt 上做 crash App