一尘不染

强制MySQL在不使用JOIN / UNION的情况下从WHERE IN子句返回重复项?

mysql

这可能不是很明智,但是如果WHERE IN子句中有重复的条件,我想让MySQL返回完全相同的重复行。这可能吗?

举个例子:

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

我想让MySQL向我返回ID为5的行3次,ID为1和2的行两次,以及3和4的行。

由于IN参数的长度以及重复计数(一次,两次,三次等)将是任意的,我不想依赖UNIONor JOIN。这样是否可能呢?


阅读 404

收藏
2020-05-17

共1个答案

一尘不染

我不确定为什么要禁止JOIN,因为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

我不确定您是否考虑过这种方法?它没有您似乎担心的问题。

如果您禁止加入,除非使用存储过程,否则您将无法执行此操作,我想说这比加入更糟。

2020-05-17