我有一个名为集合的表格,其中有 pk_collectionid 和名称字段。
我正在生成一个字符串,其中包含以逗号分隔的集合ID。格式为:1,1
我想从collections表中检索字符串中提到的所有id的名称。
我使用了IN clause under mysql
。
我的查询是:
SELECT name
FROM `collections`
WHERE `pk_collectionid`
IN ( 1, 1 )
现在它正在生成一行,因为id是常见的,但我希望它应该显示两行而不是一行,即使id是相同的。
答案 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索引到您创建的映射中。这样,您就可以根据需要单独处理每条记录。
如果您提到了您正在使用的语言,我们也可以举例说明代码。