【问题标题】:How get a row multiple times repeated at SQL query result?如何在 SQL 查询结果中多次重复一行?
【发布时间】:2021-01-07 00:42:53
【问题描述】:

我想在我的 SQL 结果中重复一些行。我已经测试了IN operator,但它只会返回每一行一次:

SELECT ID,text from myTable WHERE id IN (2,2,3,4,4,5)

可以通过发送多个 SELECT 查询来完成,

SELECT ID,text from myTable WHERE id=1
UNION ALL
SELECT ID,text from myTable WHERE id=4
UNION ALL
SELECT ID,text from myTable WHERE id=4
UNION ALL
SELECT ID,text from myTable WHERE id=4
UNION ALL
SELECT ID,text from myTable WHERE id=4
UNION ALL
SELECT ID,text from myTable WHERE id=4
UNION ALL
SELECT ID,text from myTable WHERE id=5

但是当我有很大的要求时它变得很慢。

【问题讨论】:

  • 不,不一样。我已经编辑了我的问题。
  • 只是为了了解“它正在工作,但它向数据库发送了许多“选择”请求”。请记住,SQLite 不是传统的客户端-服务器数据库,因此“发送请求”是一个几乎没有意义的短语。您必须进行基准测试才能确定,但​​我怀疑 multi-UNION 方法的速度会与任何其他解决方案有很大不同(尽管CL's answer 看起来更整洁)。
  • 使用UNION方式,sqlite中不能使用超过500条“select”命令!

标签: sql


【解决方案1】:

IN 运算符只是检查左边的值是否与右边的某个值匹配。 要返回多行,您必须使用多个 SELECT,或者创建一个临时表,其中值 4 出现在多行中:

WITH IDs_to_search(ID) AS (
    VALUES (2), (3), (4), (4), (5)
)
SELECT ID, text
FROM MyTable
JOIN IDs_to_search USING (ID);

【讨论】:

  • 谢谢,它比多个 SELECT 更快。
  • 非常感谢。我查了很多,都不好。它在 SQLLite3 上运行良好:XX 这个解决方案甚至根据输入 ID 保存结果的顺序。谢谢:X
  • @alireza 除非您使用 ORDER BY,否则无法保证订单。 (如果需要,您可以在临时表中添加第二列。)
猜你喜欢
  • 2013-09-28
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多