SQL SELECT 语句根据 WHERE 语句跳过行

Posted

技术标签:

【中文标题】SQL SELECT 语句根据 WHERE 语句跳过行【英文标题】:SQL SELECT statement skips rows based on WHERE statement 【发布时间】:2016-01-05 16:10:02 【问题描述】:

对不起,这可能是一个愚蠢的问题!我创建了一个程序来维护和运行一系列程序/功能。如果任何程序发生错误,则会向我发送一封电子邮件,并使用失败的程序名称设置自动刷新参数。单个表包含所有过程(确切名称为 varchar2)以自上而下的顺序运行,具有循环结构。如何跳到使用 select 语句失败的过程,同时抓住失败的过程下的所有其他过程?基本上我希望程序从它停止的地方开始,并继续运行所有其他程序的过程。我会很感激任何想法,因为我只是在学习。

更新

对于那些困惑的人。我需要一个 SELECT 语句,它根据位置跳过行并抓取第一行下方的所有其他行。下面的基本伪代码...

SELECT procedure_name
FROM table_whatever
SKIP ROWS that procedure_status <> 'completed'
AND grab all rows underneath
WHILST keeping rows in proper order

id  procedure          status
15  table_insert       failed
16  table_update       In Queue
17  email_completion   In Queue

我需要抓取失败的程序以及下面的所有内容。

有什么想法吗?

提前谢谢你!

【问题讨论】:

请阅读常见问题解答,了解如何在 *** 上提出问题,以便获得最佳答案:***.com/help/how-to-ask。您应该有表格结构、示例数据和预期结果。 请提供代码,没有人喜欢阅读一些陈述,而且没有帮助,您的程序到底哪里有问题? @TomH 谢谢。下次我会记住这一点。不幸的是,我无法显示结构、示例数据或任何类似的东西。这正在我公司的测试服务器上进行测试,以准备在 pl/sql 和 Oracle 数据库中进行认证。我希望有人能给出一个我可以遵循的非常基本的例子,或者告诉我这是不可能的。 @pouyankhodabakhsh 这很公平。不幸的是,我不能根据合同提供。只需要知道这样的 SELECT 语句是否可行。 可悲的是,这就是我们的生活,互相挑剔死亡的答案。呃-我的意思是帮助别人并在这个过程中自己学习一些东西!祝大家新年快乐! :-) 【参考方案1】:

我会咬人的,这到底是怎么回事。根据您上面的数据,假设只能有一行状态为“失败”,并假设程序按“id”顺序排列:

SELECT procedure
FROM   table_whatever
WHERE  id >= (SELECT ID
              FROM   table_whatever
              where  status = 'failed')
ORDER by id;

【讨论】:

是的,你所说的关于我制定的基本设计都是真实的。作为 SQL 和 PL/SQL 的初学者,我没有意识到您可以在 WHERE 子句中创建 SELECT。对于我的教程中的这个绕道来说,这似乎足够动态地工作。 使用min(ID) 将消除只有一个可以具有失败状态的要求。【参考方案2】:

根据您的最小伪代码,并假设“正确顺序”是按 ID,您可以排除那些已完成的:

SELECT procedure_name
FROM table_whatever
WHERE procedure_status <> 'completed'
ORDER BY id;

如果您明确想要查找“失败” - 或者可以使用相同的查询在任何内容运行之前启动序列 - 您可以使用分析查询和内联视图,因此您只需点击表格一次:

SELECT procedure_name
FROM (
  SELECT id, procedure_name, procedure_status,
    MIN(CASE WHEN procedure_status = 'failed' THEN id END) OVER () AS failed_id
  FROM table_whatever
)
WHERE id >= COALESCE(failed_id, 0)
ORDER BY id;

对于一个小表来说,点击两次可能没什么大不了的,所以 Gary_W 的子查询方法也可以工作......

【讨论】:

以上是关于SQL SELECT 语句根据 WHERE 语句跳过行的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句 select from where中可否嵌入if条件语句?

关于 select的条件语句where 后能否内嵌另一个 select语句??

mysql语句where条件中的是啥意思

SQL语句中where条件的写法

sql语句借助case when实现自动拼装where条件

如何在 WHERE 子句中编写带有 SELECT 语句的 SQL DELETE 语句?