我需要制作一个select
,返回指定IDs
中array
的对象。但是如果我可以像closure
中指定的那样多次返回相同的对象,那将会非常有用。即使这个对象只在database
中出现一次。例如
SELECT * FROM `T` WHERE `id` IN (1, 1, 2)
我希望它返回3行 - 第一行2倍。对我来说重要的是这些结果是在闭包中指定的顺序。这可能是MYSQL
吗?
答案 0 :(得分:1)
你可以这样做:
SELECT * FROM T WHERE item_id = 1
UNION ALL
SELECT * FROM T WHERE item_id = 1
UNION ALL
SELECT * FROM T WHERE item_id = 2
使用union all
,连接所有语句(只返回1行)
答案 1 :(得分:0)
你也可以写。
因为UNION ALL总是使用内存表来保存结果。
只定义数字时,可以使内存表保持更小。
我还假设列id是带有主键的auto_incremented列。
如果没有id列的索引,加入并不是一个好主意。
SELECT
T.*
FROM (
SELECT
1 AS number
FROM DUAL
UNION ALL
SELECT
1 AS number
FROM DUAL
UNION ALL
SELECT
2 AS number
FROM DUAL
)
AS numbers
INNER JOIN
T
ON
T.id = numbers.number
ORDER BY
numbers.number ASC