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