【问题标题】:SQLite – Issue with reusing values from the SELECT clause in the WHERE clauseSQLite – 在 WHERE 子句中重用 SELECT 子句中的值的问题
【发布时间】:2021-01-26 12:11:58
【问题描述】:

假设我有以下 SQLite 查询,我在其中计算两种产品价格的总和:

SELECT p1.cost + p2.cost FROM products as p1, products as p2 WHERE p1.cost + p2.cost < 100;

在 SELECT 子句和 WHERE 子句中都写 p1.cost + p2.cost 有点低效,所以我们可以这样修复它:

SELECT p1.cost + p2.cost AS total FROM products as p1, products as p2 WHERE total < 100;

现在假设我想将查询结果中的列命名为“cost”而不是“total”。尝试这样做会导致以下查询:

SELECT p1.cost + p2.cost AS cost FROM products as p1, products as p2 WHERE cost < 100;

但是,这会导致“列名不明确”错误,因为 SQLite 无法确定 WHERE 子句中的“成本”是指 p1.cost、p2.cost 还是 SELECT 中创建的“成本”条款。如何明确表明我正在尝试选择在 SELECT 子句中创建的“成本”?

【问题讨论】:

  • SQL 通常不支持在WHERE 子句中使用列别名。重复表达式。

标签: sql database sqlite


【解决方案1】:

最好的办法是子查询或 CTE:

SELECT p12.*
FROM (SELECT p1.id as id1, p2.id as id2, p1.cost + p2.cost AS total
      FROM products p1 CROSS JOIN
           products p2
     ) p12
WHERE total < 100;

SELECT 中定义的列别名不允许在SELECTWHEREON 子句中使用。时期。这适用于所有数据库引擎,包括 SQLite。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多