我意识到大多数情况下您不希望这样做,但是我正在寻找一种使用IN获取重复行的方法。
SELECT `id`, `name`
FROM `users`
WHERE `id` IN
(11, 11, 3, 11, 6)我想要的结果:
+----+---------+
| id | name |
+----+---------+
| 11 | Alice |
| 11 | Alice |
| 3 | Bob |
| 11 | Alice |
| 6 | Charlie |
+----+---------+这是一个非常简单的例子,但是在真正的查询中,能够使用IN来完成这个任务将使我的生活轻松1000倍。
发布于 2020-10-22 17:44:17
您要寻找的是一个连接,它为您生成所需的笛卡儿产品:
SELECT users.id, users.name
FROM users
JOIN (
SELECT 11 id, 1 ordinal UNION ALL
SELECT 11 id, 2 ordinal UNION ALL
SELECT 3 id, 3 ordinal UNION ALL
SELECT 11 id, 4 ordinal UNION ALL
SELECT 6 id, 5 ordinal
) t ON t.id = users.id
ORDER BY ordinal订购是可选的当然..。db-这里的小提琴
发布于 2020-10-22 17:40:00
,不,不行,
您请求的是满足某些条件(或者,在本例中是一个条件: ID必须是任何$thisListOfIds)的表中存在的所有行。
您并不要求对结果的行集执行任何复制操作。
更重要的是,我怀疑这是否真的是正确的方法,即使在你的真实世界复杂的用例中。在执行查询时,即使是中间步骤,通常也不会合成更多的冗余数据。
发布于 2020-10-22 19:43:09
与@Lukas Eder具有更简洁的语法相同的思想:
WITH t(id, ordinal) AS (
VALUES ROW(11, 1), ROW(11,2), ROW(3,3), ROW(11,4), ROW(6,5)
)
SELECT users.id, users.name
FROM users
JOIN t ON t.id = users.id
ORDER BY ordinal;https://stackoverflow.com/questions/64487674
复制相似问题