7

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 两次,以及 3 和 4 一次。

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

4

1 回答 1

4

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

不知道你有没有考虑过这种方法?它没有您似乎害怕的问题。

如果你禁止加入,除非你使用存储过程,否则你不能这样做,我想说这比加入更糟糕。

于 2010-02-13T21:45:28.710 回答