如何在同一查询中的另一个别名内使用别名而不复制/粘贴?

时间:2018-04-23 18:33:40

标签: php mysql sql mysqli pdo

我有一个包含查询中所有列的表格,我使用的查询越来越长,因为我会复制/粘贴。

您可以在此处找到表格和查询:
http://sqlfiddle.com/#!9/672a8f/1
请注意,查询中的某些列可能不存在于表中,因为我必须删除一些列才能构建架构。

以下是我所谈论的更简单的例子:

SELECT
    //First Alias.
    IF(HW="Yes", "Great", "Not Great") AS Nested1,

    //Second Alias.
    IF( IF(HW="Yes", "Great", "Not Great") ="Great",1,0) AS Nestedd2
FROM table_name

因此,我不想复制/粘贴第一个别名Nested1,而是使用以下内容:

SELECT
    IF(HW="Yes", "Great", "Not Great") AS Nested1,
    IF( Nested1 ="Great",1,0) AS Nestedd2
FROM table_name

怎么做?在同一个查询中使用另一个别名?

3 个答案:

答案 0 :(得分:0)

您可以使用子查询:

SELECT
    Nested1,
    IF( Nested1 ="Great",1,0) AS Nestedd2
FROM
(
    SELECT
        IF(HW="Yes", "Great", "Not Great") AS Nested1
    FROM table_name
) as t

答案 1 :(得分:0)

我会把它写成:

SELECT (CASE WHEN HW = 'Yes' THEN 'Great' ELSE 'Not Great' END) AS Nested1,
       (HW = 'Yes') as Nestedd2
FROM table_name;

注意:

  • 在SQL中使用单引号作为字符串常量。这是标准。
  • 同样,IF()是MySQL扩展,CASE是标准。嵌套的IF()特别令人不愉快。
  • 您可以将布尔表达式视为MySQL中的整数。这是一个非常方便的捷径。

当然,更一般的答案是使用子查询,视图或MySQL 8.0,CTE。

答案 2 :(得分:0)

或者,如果您在php中准备语句,则可以执行以下操作:

$Nested1 = "IF(HW='Yes', 'Great', 'Not Great')";
$Nestedd2 = "IF( $Nested1 ='Great',1,0)";
$query = "SELECT $Nested1 AS Nested1, $Nestedd2 AS Nestedd2 FROM table_name";