SQLite–重用WHERE子句中SELECT子句中的值时出现问题

SQLite–重用WHERE子句中SELECT子句中的值时出现问题,sql,database,sqlite,Sql,Database,Sqlite,假设我有以下SQLite查询,其中我计算两种产品的价格之和: 从产品中选择p1.cost+p2.cost作为p1,产品作为p2,其中p1.cost+p2.cost

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

从产品中选择p1.cost+p2.cost作为p1,产品作为p2,其中p1.cost+p2.cost<100

在SELECT子句和WHERE子句中写入p1.cost+p2.cost有点低效,因此我们可以这样解决它:

选择p1.cost+p2.cost作为总计,从产品中选择p1,产品中选择p2,其中总计<100

现在让我们假设我想在查询结果cost中命名列,而不是total。尝试这样做将导致此查询:

选择p1.cost+p2.cost作为成本,产品作为p1,产品作为p2,其中成本<100


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

最好使用子查询或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中定义的列别名不允许出现在该SELECT的WHERE或ON子句中。时期这适用于所有数据库引擎,包括SQLite。

SQL通常不支持在WHERE子句中使用列别名。重复这个表达。好的,谢谢你的信息!