如何在 SQL 中制定 FOR EACH 循环?
Posted
技术标签:
【中文标题】如何在 SQL 中制定 FOR EACH 循环?【英文标题】:How to formulate FOR EACH loop in SQL? 【发布时间】:2011-05-12 22:13:20 【问题描述】:我正在开发一个目前适用于一个组/模式组合的 SQL 查询。但我希望此查询适用于所有组和模式。并且每个组合只包含一次。但在源数据中还有很多其他列,因此每个组合有不止一条记录。
所以我的源表结构是:
group mode p-val
----- ---- ------
A B 4.567
C D 3.694
如何设置循环以遍历每个组/模式组合?而且我宁愿不使用游标!
【问题讨论】:
请按照之前的要求正确格式化您的帖子。循环在每个步骤中做什么?如果它本质上是程序性的,那么就没有特别的理由使用另一个循环结构而不是游标(因为它们是专门为遍历结果行而设计的)。最好的办法是以基于集合的方式重写它,但你给我们的信息完全为零。 您展示的是样本输入还是预期输出? @Thomas,这是示例输入。 【参考方案1】:一个非常广泛和普遍的问题。这是一个广泛而笼统的答案。
首先,编写一个查询来提取您感兴趣的值的集合,这样每个集合都是唯一的。 SELECT DISTINCT...
和 SELECT... GROUP BY...
建议自己。
这些数据可以存储为临时表、作为子查询包含在内,或者只是作为整个最终查询的一部分。最好的使用完全取决于您的工作。
接下来,使用此子集作为基础编写您的“主要”处理查询。类似于...FROM <theSubset> INNER JOIN <etc>
。
如果做得好(我并不是说这很容易),这种基于集合的方法的效果与通过程序循环实现的结果非常相似。
【讨论】:
对于我的问题的笼统性,我深表歉意。但这个问题很难完全解释。但是,我现在已经使用基于集合与游标的方法解决了这个问题!做了很多工作,但我能够循环通过一个 WHILE 循环来实现这个逻辑【参考方案2】:这在 sql 中称为JOIN
。即声明
SELECT * FROM table AS a JOIN table AS b;
结果
a | b | 4.5 | a | b | 4.5
a | b | 4.5 | c | d | 3.694
c | d | 3.694 | a | b | 4.5
c | d | 3.694 | c | d | 3.694
现在您拥有 [group,mode] 记录的所有组合。详细了解 Google 的 JOIN。
【讨论】:
以上是关于如何在 SQL 中制定 FOR EACH 循环?的主要内容,如果未能解决你的问题,请参考以下文章
Java,如何在“for each”循环中获取当前索引/键[重复]