首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL "IN“子句能返回重复项吗?

MySQL "IN“子句能返回重复项吗?
EN

Stack Overflow用户
提问于 2020-10-22 17:38:12
回答 3查看 292关注 0票数 2

我意识到大多数情况下您不希望这样做,但是我正在寻找一种使用IN获取重复行的方法。

代码语言:javascript
复制
SELECT `id`, `name`
FROM `users`
WHERE `id` IN
      (11, 11, 3, 11, 6)

我想要的结果:

代码语言:javascript
复制
+----+---------+
| id | name    |
+----+---------+
| 11 | Alice   |
| 11 | Alice   |
| 3  | Bob     |
| 11 | Alice   |
| 6  | Charlie |
+----+---------+

这是一个非常简单的例子,但是在真正的查询中,能够使用IN来完成这个任务将使我的生活轻松1000倍。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-22 17:44:17

您要寻找的是一个连接,它为您生成所需的笛卡儿产品:

代码语言:javascript
复制
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-这里的小提琴

票数 2
EN

Stack Overflow用户

发布于 2020-10-22 17:40:00

,不,不行,

您请求的是满足某些条件(或者,在本例中是一个条件: ID必须是任何$thisListOfIds)的表中存在的所有行。

您并不要求对结果的行集执行任何复制操作。

更重要的是,我怀疑这是否真的是正确的方法,即使在你的真实世界复杂的用例中。在执行查询时,即使是中间步骤,通常也不会合成更多的冗余数据。

票数 2
EN

Stack Overflow用户

发布于 2020-10-22 19:43:09

@Lukas Eder具有更简洁的语法相同的思想:

代码语言:javascript
复制
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;

db<>fiddle demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64487674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档