【问题标题】:How to debug in the middle of a SELECT query?如何在 SELECT 查询中间进行调试?
【发布时间】:2020-12-25 03:44:06
【问题描述】:

我正在调试带有未返回正确结果的相关子查询的 SELECT 查询。我的查询形式是示意性的

SELECT id, cost, country
FROM table AS table1
WHERE table1.cost =
(
    SELECT MAX(table2.cost)
    FROM table as table2
    WHERE table2.country = table1.country
)

我希望能够在执行过程中暂停并查看 WHERE 语句中正在比较的值。但是,例如,如果我将 PRINT 语句作为子查询的第一行,它似乎不会运行。我是 SQL 新手,很想知道在这种情况下,更有经验的人认为什么是最省时的调试方法。

【问题讨论】:

  • SELECT MAX(cost) FROM table as table2 返回什么?顺便说一句,该子查询不相关。它需要一个 WHERE 子句条件引用 table1。
  • 这里没有什么要调试的,我不知道有什么更好的方法,但是要查看table1的每个成本的比较,只需将子查询作为列放在选择子句并运行不带where 子句的语句
  • 示例存在问题,我刚刚修复了它,感谢您指出这一点。但我并没有特别询问我在这里写的查询,我只是想知道是否有可能,一般来说,在子查询中间暂停以查看特定变量采用的值,以便进行调试。或者如果这不可能,除了写出代码的子集以查看它们是否正常工作之外,还有什么更好的调试方法?
  • 什么是正确的结果?目前,您将获得每个国家/地区最高费用的行。

标签: sql sqlite debugging select


【解决方案1】:

SQL 不支持你想做的事情。

记住SQL 是一种描述性 语言而不是过程 语言是非常重要的。 SQL 查询描述正在生成的结果集。它确实指定正在采取的具体行动。

如果您想知道子查询的结果是什么,请将其作为单独的查询运行。

【讨论】:

  • 不过,在实践中,当然会“在后台”执行一系列程序来实现所需的输出。所以在这方面,这仍然是一种假设的可能性——但很高兴知道我不应该进一步寻找这样的功能。感谢您的帮助。
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 2021-02-13
  • 1970-01-01
相关资源
最近更新 更多