需要有关MySQL IN子句的帮助

时间:2011-09-08 10:13:29

标签: mysql sql

我有一个名为集合的表格,其中有 pk_collectionid 名称字段。

我正在生成一个字符串,其中包含以逗号分隔的集合ID。格式为:1,1

我想从collections表中检索字符串中提到的所有id的名称。

我使用了IN clause under mysql

我的查询是:

SELECT name
FROM `collections`
WHERE `pk_collectionid`
IN ( 1, 1 )

现在它正在生成一行,因为id是常见的,但我希望它应该显示两行而不是一行,即使id是相同的。

2 个答案:

答案 0 :(得分:3)

这是一个非常奇怪的要求。我能想到的唯一解决方案是使用UNION ALL查询:

SELECT name FROM `collections` WHERE `pk_collectionid` = 1
UNION ALL
SELECT name FROM `collections` WHERE `pk_collectionid` = 1
-- UNION ALL
-- SELECT name FROM `collections` WHERE `pk_collectionid` = 2
-- UNION ALL
-- SELECT name FROM `collections` WHERE `pk_collectionid` = 3
-- ...

答案 1 :(得分:2)

你不应该试图从查询中获取重复的行 - 这不是必需的,这是浪费,而且实现起来很痛苦。

而不是这样做,而是从结果集中创建一个id到整行的地图。然后,您可以迭代包含重复ID的集合(您首先用于构造查询的集合),并使用每个id索引到您创建的映射中。这样,您就可以根据需要单独处理每条记录。

如果您提到了您正在使用的语言,我们也可以举例说明代码。