SQL中的select子句中是否可以使用比较运算符进行列计算?

SQL中的select子句中是否可以使用比较运算符进行列计算?,sql,odbc,Sql,Odbc,可以将比较运算符(>,=,=column2)从表中设置为“column3” 似乎只有一些数据库支持比较运算符,例如MS Access。我正在使用ODBC连接到不同的数据库,我知道的一种方法是使用“CASE…WHEN…THEN…ELSE”子句。问题是,是否有其他方法可以在select子句中使用比较运算符来计算新列 另一个问题是,如果我想使用新的computed列(“示例中的column3”)来过滤WHERE子句中的一些数据,那么SQL应该是什么样子?你说得对-并非所有数据库都支持这种比较语法。但是

可以将比较运算符(>,=,=column2)从表中设置为“column3”

似乎只有一些数据库支持比较运算符,例如MS Access。我正在使用ODBC连接到不同的数据库,我知道的一种方法是使用
“CASE…WHEN…THEN…ELSE”
子句。问题是,是否有其他方法可以在select子句中使用比较运算符来计算新列


另一个问题是,如果我想使用新的computed列(“示例中的column3”)来过滤
WHERE
子句中的一些数据,那么SQL应该是什么样子?

你说得对-并非所有数据库都支持这种比较语法。但是大多数流行的开源数据库:(SQLFIDLE link)都支持它

在和上,您应该使用

CASE a>b THEN 1 ELSE 0 END
作为一种变通方法(这也适用于前面提到的所有数据库)


关于您关于在WHERE子句中使用新列的问题:一般来说,您不能这样做,除非您在内部SELECT周围再使用一个外部SELECT,并在外部SELECT中使用另一个WHERE。

大小写语法是ANSI SQL,适用于所有DBMS,并且应该是首选,因为它更好地记录了使用新c的意图
WHERE
子句中的列,我刚刚在oracle中尝试过,似乎我可以直接复制
WHERE
中的
CASE
子句,而无需使用外部的
SELECT
。这是否意味着我可以对大多数数据库采用这种方法?下面是SQL,
SELECT avg(age)as avg_age,(CASE when(age>22)然后从qmao_person group by中重试“true”或“false”结束(case when(年龄>22岁),然后再重试“true”或“false”结束);
当…中的
中的WHERE
group by
中打开时,您当然可以使用完整的
case when…
而不必在
选择中结束(但您必须重复整个表达式)。但您不能为其指定名称(别名)作为输入表达式并在
WHERE
groupby
中使用该别名是的,在
WHERE
groupby
中重复该表达式似乎比使用嵌套的
SELECT
有点愚蠢。问题是以哪种方式更有效。@AaronMao:它将高度依赖于实现。然而,许多供应商会将您的查询优化到无关紧要的程度。通常的做法是将子选择转换为联接,或将公共子表达式分解出来,以便它们只进行一次计算。例如,这基本上是
HAVING
子句中的一项要求-您必须重复看似昂贵的表达式,即使它非常昂贵在这种情况下,你最好的朋友是
EXPLAIN-ANALYZE