如何找出 SQL 查询未按预期生成行的原因? [复制]

Posted

技术标签:

【中文标题】如何找出 SQL 查询未按预期生成行的原因? [复制]【英文标题】:How to find out why a SQL query does not produce rows as expected? [duplicate] 【发布时间】:2017-02-27 14:21:36 【问题描述】:

我对编程很陌生。在我的数据库类中,我必须“仅返回余额大于 50 的发票”。 当我运行它时,什么都没有出现。我做错了什么?

USE ap;
SELECT invoice_number, payment_total + credit_total AS 'payment_credit_total' , invoice_total - 'payment_credit_total' AS 'balance_due'
FROM invoices
WHERE 'balance_due' > 50
ORDER BY 'balance_due' DESC

【问题讨论】:

幸运的是,读者已经发现了这个查询的问题。但是,通常我们会要求提问者准备尽可能小的测试数据集来突出问题。就目前而言,如果有人没有发现查询问题,答案可能是有问题的表是空的。考虑在您的问题中添加一个 SQL Fiddle - 这也可以包含一个简单的数据集。 【参考方案1】:

balance_due 是您的表达式的别名,它只是您的结果集上的一个标签。但是,您不得在查询中使用它。

SELECT invoice_number, payment_total + credit_total AS 'payment_credit_total' , invoice_total - payment_total + credit_total AS 'balance_due'
FROM invoices
WHERE invoice_total - payment_total + credit_total > 50
ORDER BY invoice_total - payment_total + credit_total DESC

【讨论】:

不完全。您不能在 WHERE 子句中使用它,但您可以在 ORDER BY 子句中使用它。 没错,在 order 子句中你甚至可以设置数字索引

以上是关于如何找出 SQL 查询未按预期生成行的原因? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询未按预期给出结果

SQL NOT EXISTS 子查询未按预期运行

程序约束未按预期工作

查询未按预期执行,无论如何都返回 -1

SQL Server STRING_AGG 函数排序未按预期工作

MySQL NOT IN 子查询未按预期工作