如果where子句在SQL中有重复的条件值,如何获取多行
Posted
技术标签:
【中文标题】如果where子句在SQL中有重复的条件值,如何获取多行【英文标题】:How to get multiple rows if where clause has repeated condition values in SQL 【发布时间】:2021-06-13 14:20:48 【问题描述】:我正在尝试使用WHERE IN (...ids)
格式获取所有行。这工作正常。但是如果IN
中的ID 重复,SQL 默认只返回该ID 的一行。
如果ID
存在N
次WHERE 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 |
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于如果where子句在SQL中有重复的条件值,如何获取多行的主要内容,如果未能解决你的问题,请参考以下文章
SQL左连接与JOIN条件中的过滤器与WHERE子句中的过滤器[重复]