mysql8.0.32查询按中文查的有问题

select distinct param
from(
select '湿度' param
union all
select '温度' param
union all
select '洁净度' param
) x where param='湿度',这个sql 在mysql 8.0.32上执行不对,有啥解决办法吗?

是我的话,倾向于cte做了:

WITH Cte AS (
  SELECT '湿度' AS param
  UNION ALL
  SELECT '温度' AS param
  UNION ALL
  SELECT '洁净度' AS param
)
SELECT DISTINCT param
FROM Cte
WHERE param = '湿度'


你可以在嵌套查询中添加一个列名,以便在外部查询中引用。例如:

SELECT DISTINCT param 
FROM (
  SELECT '湿度' AS param
  UNION ALL 
  SELECT '温度' AS param
  UNION ALL 
  SELECT '洁净度' AS param
) x 
WHERE param = '湿度';

在内部SELECT语句中,添加“AS param”将“param”列的名称指定为“param”,以便在外部查询中引用。试试看

你的期望结是什么,查询结果是什么。按sql的逻辑查询结果是湿度

SELECT DISTINCT
    param 
FROM
    ( SELECT '湿度' param UNION ALL SELECT '温度' param UNION ALL SELECT '洁净度' param ) x 
WHERE
    param = '湿度'

img

在 MySQL 8.0.32 中执行这个 SQL 语句会出现错误,是因为最后一个逗号“,”导致的语法问题。正确的写法应该是:

SELECT DISTINCT param
FROM (
    SELECT '湿度' AS param
    UNION ALL
    SELECT '温度' AS param
    UNION ALL
    SELECT '洁净度' AS param
) x 
WHERE param = '湿度';

在子查询中需要给每个 SELECT 子句都起一个别名,否则会提示语法错误。同时,在 WHERE 条件中也应该使用 param 的全称,即 WHERE x.param = '湿度'

在修改完毕后,这个 SQL 语句就可以正常执行了。