Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否将列名定义为SQL中的另一个名称?_Mysql_Sql_Pdo - Fatal编程技术网

Mysql 是否将列名定义为SQL中的另一个名称?

Mysql 是否将列名定义为SQL中的另一个名称?,mysql,sql,pdo,Mysql,Sql,Pdo,我的问题如下: SELECT value FROM table WHERE ((col1+col2+col3)/col4) > 4 AND ((col1+col2+col3)/col4) < 5 UNION ALL SELECT value FROM table WHERE ((col1+col2+col3)/col4) > 3 AND ((col1+col2+col3)/col4) < 4 在本例中,只需要修改一行而不是

我的问题如下:

SELECT value
    FROM table
    WHERE ((col1+col2+col3)/col4) > 4
    AND ((col1+col2+col3)/col4) < 5
UNION ALL
SELECT value
    FROM table
    WHERE ((col1+col2+col3)/col4) > 3
    AND ((col1+col2+col3)/col4) < 4
在本例中,只需要修改一行而不是四行。它更易于阅读和维护。

您可以在定义之前进行联合:

SELECT ((col1+col2+col3)/col4) as value
FROM ((SELECT col1, col2, col3, col4
       FROM table1
      ) UNION ALL
      (SELECT col1, col2, col3, col4
       FROM table2
      )
     ) t
HAVING value > 4 and value < 5
having子句的这种用法是MySQL特有的。您可能需要另一个子查询或CTE用于另一个数据库。

您可以在定义之前执行union all:

SELECT ((col1+col2+col3)/col4) as value
FROM ((SELECT col1, col2, col3, col4
       FROM table1
      ) UNION ALL
      (SELECT col1, col2, col3, col4
       FROM table2
      )
     ) t
HAVING value > 4 and value < 5
having子句的这种用法是MySQL特有的。另一个数据库需要另一个子查询或CTE。

在MySQL中:

用户变量旨在提供数据值。不可能 直接在SQL语句中用作标识符或SQL语句的一部分 标识符,例如在表或数据库名称为 应为,或作为保留字,如SELECT。这是真的,即使 变量被引用为[…]

链接:

也就是说,您可以按如下方式构造和执行查询:

SET @var=((col1+col2+col3)/col4);
SET @s=CONCAT("SELECT value FROM table WHERE ", @var," > 4 AND ", @var,
" < 5 UNION ALL SELECT value FROM table WHERE ", @var," > 3 AND ", @var,
" < 4");
PREPARE stmt FROM @s;
EXECUTE stmt;
但是,这可能会破坏使其更易于阅读或维护的目的。

在MySQL中:

   SELECT tt.value FROM 
   (SELECT ((t.col1+t.col2+t.col3)/t.col4) as value
      FROM ((SELECT col1, col2, col3, col4
               FROM #Temp
            ) UNION ALL
            (SELECT col1, col2, col3, col4
               FROM #Temp
            )

           ) t)tt
GROUP BY tt.value
HAVING tt.value > 4 and tt.value < 5
用户变量旨在提供数据值。不可能 直接在SQL语句中用作标识符或SQL语句的一部分 标识符,例如在表或数据库名称为 应为,或作为保留字,如SELECT。这是真的,即使 变量被引用为[…]

链接:

也就是说,您可以按如下方式构造和执行查询:

SET @var=((col1+col2+col3)/col4);
SET @s=CONCAT("SELECT value FROM table WHERE ", @var," > 4 AND ", @var,
" < 5 UNION ALL SELECT value FROM table WHERE ", @var," > 3 AND ", @var,
" < 4");
PREPARE stmt FROM @s;
EXECUTE stmt;

但是,这可能会破坏使其更易于阅读或维护的目的。

您使用的是什么数据库?请适当标记问题。您使用的是什么数据库?请适当地标记问题。
   SELECT tt.value FROM 
   (SELECT ((t.col1+t.col2+t.col3)/t.col4) as value
      FROM ((SELECT col1, col2, col3, col4
               FROM #Temp
            ) UNION ALL
            (SELECT col1, col2, col3, col4
               FROM #Temp
            )

           ) t)tt
GROUP BY tt.value
HAVING tt.value > 4 and tt.value < 5