列表中每个值的 SQL 查询循环

Posted

技术标签:

【中文标题】列表中每个值的 SQL 查询循环【英文标题】:SQL query looping for each value in a list 【发布时间】:2021-07-27 23:01:24 【问题描述】:

这里是 SQL 新手 - 我正在尝试从与特定条件匹配的表中获取 1 行

通常看起来像

SELECT TOP 1 * 
FROM myTable 
WHERE id = 'abc' 

输出可能看起来像

 value    id
--------------
  1       abc

该表有许多“id”条目,我试图为每个“id”获取一个条目。现在我有'id's列表。我将如何执行类似

SELECT TOP 1 * 
FROM myTable
FOR EACH id
WHERE id IN ('abc', 'edf', 'fgh')

期待结果

 value    id
 --------------
  1       abc
  10      edf
  12      fgh

我不知道是某种联合还是连接操作,但想学习。我正在使用 Azure SQL Server

【问题讨论】:

用您正在使用的数据库标记您的问题。 【参考方案1】:

该表有许多“id”条目,我试图为每个“id”获取一个条目。现在我有了 'id's 的列表。

一个典型的方法是row_number():

select t.*
from (select t.*,
             row_number() over (partition by id order by id) as seqnum
      from mytable t
     ) t
where seqnum = 1;

注意:您可以根据需要过滤特定的 ID。目前尚不清楚您的问题是否真的需要这样做。

如果您碰巧使用的是 SQL Server(如 select top 建议的那样),则可以使用更简洁但性能稍差的:

select top (1) with ties t.*
from mytable t
order by row_number() over (order by id order by (select null));

【讨论】:

不确定,我在运行命令时遇到了问题 - 可能与我使用 sql azure server 有关? @user6386155 。 . . Azure 支持窗口函数,所以我认为这不是问题。

以上是关于列表中每个值的 SQL 查询循环的主要内容,如果未能解决你的问题,请参考以下文章

第 4 章 操作列表

是否有用于 TFS 警报查询的括号值的列表或说明?

是否有用于TFS警报查询的括号值的列表或说明?

SQL查询以选择在同一列中具有不同值的子记录的父级

在循环中插入sql查询是好习惯还是坏习惯?

如何将包含数组中的值的熊猫列扩展到多列?