Mysql 高效的CASE语句

Mysql 高效的CASE语句,mysql,sql,case,Mysql,Sql,Case,我的问题是: select col1, col2, (<a fairly complex query> as col3) from <a table> 然而,这种方法执行两次。如果我只想执行一次,有哪些选项?您可以使用子查询和合并: 无子查询: SELECT col1, col2, COALESCE(<a fairly complex query>, col2) AS col3 FROM <a table>; select col1, col2

我的问题是:

select col1, col2, (<a fairly complex query> as col3) from <a table>

然而,这种方法执行两次。如果我只想执行一次,有哪些选项?

您可以使用子查询和合并:

无子查询:

SELECT col1, col2, COALESCE(<a fairly complex query>, col2) AS col3
FROM <a table>;
select col1, col2, COALESCE(<a fairly complex query>, col2) AS col3 from <a table>

您可以使用子查询和合并:

无子查询:

SELECT col1, col2, COALESCE(<a fairly complex query>, col2) AS col3
FROM <a table>;
select col1, col2, COALESCE(<a fairly complex query>, col2) AS col3 from <a table>

与其他答案类似,但不需要子查询:

SELECT col1, col2, COALESCE(<a fairly complex query>, col2) AS col3
FROM <a table>;
select col1, col2, COALESCE(<a fairly complex query>, col2) AS col3 from <a table>

与其他答案类似,但不需要子查询:

SELECT col1, col2, COALESCE(<a fairly complex query>, col2) AS col3
FROM <a table>;
select col1, col2, COALESCE(<a fairly complex query>, col2) AS col3 from <a table>

您可以将复杂查询左键联接到正在使用的表。使用您可以将复杂查询左键联接到正在使用的表。使用该查询会给我留下两个col3。唯一的解决方法是显式列出我想要的列,而不是使用*?@Adam Yes,*是反模式。时期您应该显式命名columns.OK。查询不使用AS sub。包含该部分的原因是什么?它只是subquery的别名,因此您可以编写SELECT sub.col1、sub.col2等。对于可读性透视图或要将子查询连接到另一个子查询时非常有用table@Adam没有AS-sub它就不能工作,因为每个派生表都必须有自己的别名。但是,我会在SELECT子句中使用子查询,并避免不必要的临时表。唯一的解决方法是显式列出我想要的列,而不是使用*?@Adam Yes,*是反模式。时期您应该显式命名columns.OK。查询不使用AS sub。包含该部分的原因是什么?它只是subquery的别名,因此您可以编写SELECT sub.col1、sub.col2等。对于可读性透视图或要将子查询连接到另一个子查询时非常有用table@Adam没有AS-sub它就不能工作,因为每个派生表都必须有自己的别名。但是,我会在SELECT子句中使用子查询,并避免不必要的临时表。