【问题标题】:PostgreSQL select IN with duplicatePostgreSQL 选择 IN 重复
【发布时间】:2022-01-11 14:18:30
【问题描述】:

我有一个产品变体名称字段。

'XS', 'S', 'M', 'S', 'M', 'S', 'M', 'XS', 'S', 'M', 'XS', 'S', 'M', 'L', 'XS', 'XS', 'XS', 'S', 'XL', 'XS', 'M', 'XS', 'S', 'M', 'XS', 'M', 'S', 'XS', 'M', '小鸡黑', '勇敢的蓝色', '大胆的红色', '时髦的粉红色', '紫百胜', '蓝色', '好绿', '橘子', '紫百胜', '红色的', '黄色的', '红色的', '蓝色', '紫百胜', '好绿', '橘子', '粉色的', '浅蓝色', '红色的', '黄色的', '绿色椭圆', '浅蓝色', '粉色的', '橘子', '白色的', '绿色椭圆', '粉红椭圆', “蓝色椭圆”, '红色的', '黄色椭圆', '绿色椭圆', “蓝色椭圆”, '粉红椭圆', '橘子', '白色的', '蓝色', '薄荷绿', '尘土飞扬的粉红色', “空军蓝”, '红葡萄酒', '粉色的', '红宝石', '绿色MM', '灰色的', '蓝色', '橘子', '黄色的', '浅蓝色', '粉色的', '红宝石', '绿色MM', '灰色的', '蓝色', '橘子', '黄色的', '浅蓝色', 'SA 10', 'SA 12', 'SA 14', 'SA 16', '蓝色婴儿', '粉红色的婴儿'

我想根据上面的列表从variants 表中选择id。但是当我做这个查询时,

SELECT id FROM variants WHERE name IN ('XL', 'S', 'M', 'S', ...)

它返回分组的 id。例如,

|id|name|
|0001|XL|
|0002|S|
|0003|M|
|0004|XS|

我期望的是未分组的结果,因此会多次检索变体。例如,变体“S”必须在此处检索 2 次。

|id|name|
|0001|XL|
|0002|S|
|0003|M|
|0002|S|
..etc

这可能吗?我希望我的问题是可以理解的。提前致谢!

【问题讨论】:

  • 您的第一个查询应该已经为您提供了第二个结果集。您确定您的观察结果是可重复的吗?

标签: sql postgresql


【解决方案1】:

您可以左连接到变体名称的临时派生表。 (或者内连接,如果您不希望结果中出现 variants 中不存在的名称的行。)

SELECT v.id,
       v.name
       FROM (VALUES ('XL'),
                    ('S'),
                    ('M'),
                    ('S'),
                    ...) n
                         (name)
            LEFT JOIN variants v
                      ON v.name = n.name;

【讨论】:

  • 它按我的预期工作!谢谢,我从不奇怪我们可以从这样的“临时”表中获取数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多