强制 MySQL 从 WHERE IN 子句返回重复项而不使用 JOIN/UNION?

发布于 2024-08-21 14:53:10 字数 380 浏览 5 评论 0原文

这可能不是很明智,但如果 WHERE IN 子句中存在重复的条件,我想让 MySQL 返回精确的重复行。这可能吗?

举个例子:

SELECT
   columns
FROM
   table
WHERE
   id IN( 1, 2, 3, 4, 5, 1, 2, 5, 5)

我希望 MySQL 返回 id 为 5 的行三次,id 为 1 和 2 的行两次,id 为 3 和 4 的行一次。

由于 IN 参数的长度以及重复计数(一次、两次、三次等)是任意的,我不想依赖 UNION或<代码>加入。否则这样的事情可能吗?

This might not be very sensible, but I'ld like to let MySQL return me the exact duplicate rows if there are duplicate criteria in the WHERE IN clause. Is this possible?

Take this example:

SELECT
   columns
FROM
   table
WHERE
   id IN( 1, 2, 3, 4, 5, 1, 2, 5, 5)

I'ld like MySQL to return me rows with id 5 three times, id's 1 and 2 twice, and 3 and 4 once.

As the lenght of the IN arguments, as well as the duplicate count (once, twice, three times, etc.), will be arbitrary I don't want to rely on UNION or JOIN. Is something like this possible otherwise?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

森林迷了鹿 2024-08-28 14:53:10

我不知道你为什么要禁止 JOIN,因为它对 SQL 相当重要。这就像禁止函数式语言中的函数调用一样。

解决此问题的一个好方法是创建一个结果集,其中包含要返回的 id 并与其连接。这是一种方法:

SELECT Table1.*
FROM Table1
JOIN (SELECT 1 AS id
      UNION ALL SELECT 2
      UNION ALL SELECT 3
      UNION ALL SELECT 4
      UNION ALL SELECT 5
      UNION ALL SELECT 1
      UNION ALL SELECT 2
      UNION ALL SELECT 5
      UNION ALL SELECT 5) AS T1
ON Table1.id = T1.id

不知道你是否考虑过这种方法?它不存在您似乎担心的任何问题。

如果您禁止联接,则除非您使用存储过程,否则您将无法执行此操作,我认为这比联接更糟糕。

I'm not sure why you want to ban JOIN as its fairly essential to SQL. It's like banning function calls in a functional language.

A good way to solve this is to create a result set containing the ids you want to return and join with it. Here's one way to do it:

SELECT Table1.*
FROM Table1
JOIN (SELECT 1 AS id
      UNION ALL SELECT 2
      UNION ALL SELECT 3
      UNION ALL SELECT 4
      UNION ALL SELECT 5
      UNION ALL SELECT 1
      UNION ALL SELECT 2
      UNION ALL SELECT 5
      UNION ALL SELECT 5) AS T1
ON Table1.id = T1.id

I'm not sure if you have considered this method? It has none of the problems that you seem to be afraid of.

If you ban joins you can't do this unless you use a stored procedure, which I'd say is worse than joining.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文