【问题标题】:How to get multiple rows if where clause has repeated condition values in SQL如果where子句在SQL中有重复的条件值,如何获取多行
【发布时间】:2021-06-13 14:20:48
【问题描述】:

我正在尝试使用WHERE IN (...ids) 格式获取所有行。这工作正常。但是如果IN 中的ID 重复,SQL 默认只返回该ID 的一行。

如果ID 存在NWHERE IN (...ids),我有没有办法获得同一行N 次?

例如: 表格中的数据

id name
1 AAA
2 BBB
3 CCC

查询 SELECT * FROM people WHERE id IN (1, 2, 2, 3);

结果

id name
1 AAA
2 BBB
3 CCC

预期结果

id name
1 AAA
2 BBB
2 BBB
3 CCC

有没有办法在 SQL 中得到这个结果?

我正在使用 Postgres。

谢谢

| 3 | CCC |

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    WHERE 子句通常不会更改行数。相反,请使用JOIN:

    SELECT p.*
    FROM (VALUES (1), (2), (2), (3)) v(id) JOIN
         people p
         USING (id);
    

    注意:如果您想要列表中的所有 id,即使那些不在 people 中的 id,请使用 LEFT JOIN

    如果你想将值作为参数传入,那么数组比VALUES()更方便:

    SELECT p.*
    FROM UNNEST(ARRAY[1, 2, 2, 3]) v(id) JOIN
         people p
         USING (id);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多