在 WHERE 子句中使用 MySQL 变量

丹尼斯·蒙詹斯

如何在 WHERE 子句中正确使用 MySQL 变量?我有大量查询,而不是 column1、column2、column3,这就是为什么我认为最好使用变量。不知道我做错了什么!

SELECT 
@TEST:= CASE 
    WHEN column1=1 THEN 'ONE'
    WHEN column1=2 THEN 'TWO'
    WHEN column1=2 THEN 'THREE'
    ELSE 'Unknown'
END AS test
FROM 
    table1
WHERE
    @TEST= 'ONE'
阿尔瓦罗·冈萨雷斯

如果我猜对了,你想避免重复自己:

SELECT CASE 
    WHEN column1=1 THEN 'ONE'
    WHEN column1=2 THEN 'TWO'
    WHEN column1=2 THEN 'THREE'
    ELSE 'Unknown'
END AS test
FROM table1
WHERE CASE 
    WHEN column1=1 THEN 'ONE'
    WHEN column1=2 THEN 'TWO'
    WHEN column1=2 THEN 'THREE'
    ELSE 'Unknown'
END = 'ONE';

...但明显的方法会引发错误:

SELECT CASE 
    WHEN column1=1 THEN 'ONE'
    WHEN column1=2 THEN 'TWO'
    WHEN column1=2 THEN 'THREE'
    ELSE 'Unknown'
END AS test
FROM table1
WHERE test = 'ONE';

错误 1054 (42S22):“where 子句”中的未知列“test”

... 所以你已经发现你可以像在任何其他编程语言中一样使用变量。

无论好坏,SQL 都不是一种编程语言(它是一种查询语言)并且变量不会以这种方式运行。一般来说,您不能使用变量来替换代码片段。使用它们来存储值(如您的示例中所示)是非常危险的,正如手册所警告的那样

除了在SET语句中,您永远不应该为用户变量赋值并在同一语句中读取该值。[...] 对于其他语句,例如SELECT您可能会得到预期的结果,但这并不能保证

在这种情况下,重复整个表达式可能是唯一明智的方法。如果实际代码庞大且难以维护,您始终可以使用您的客户端语言(PHP、Java 等等)动态生成 SQL。MySQL 本身有一些动态 SQL 特性,但它们并不那么方便。

在特定情况下,您也可以使用子查询,但请注意性能有时可能会受到影响:

SELECT *
FROM (
    SELECT CASE 
        WHEN column1=1 THEN 'ONE'
        WHEN column1=2 THEN 'TWO'
        WHEN column1=2 THEN 'THREE'
        ELSE 'Unknown'
    END AS test
    FROM table1
) t
WHERE test = 'ONE';

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以在MySQL的where子句中使用当前的Dayname?

来自分类Dev

JDBC MySql绑定变量语法错误在where子句中

来自分类Dev

可以在WHERE子句中使用MySQL临时变量吗?

来自分类Dev

在MySQL的where子句中使用substring_index

来自分类Dev

在MySQL预准备语句的WHERE子句中使用通配符

来自分类Dev

MySQL:强制查询在WHERE子句中使用带有局部变量的索引

来自分类Dev

如何在WHERE子句中使用MySql MAX()

来自分类Dev

无法在CLASS中的WHERE子句中使用无Sigilless变量?

来自分类Dev

在mysql的where子句中使用未知长度的数组

来自分类Dev

在mysql jdbc准备好的语句中使用“零”时间戳(在where子句中)

来自分类Dev

JDBC MySql绑定变量语法错误在where子句中

来自分类Dev

如何在where子句中使用mysql extract year

来自分类Dev

MySQL-在WHERE子句中使用SHA2

来自分类Dev

在WHERE子句中使用一串值-MySQL

来自分类Dev

在Where子句中使用Mysql变量

来自分类Dev

在MySQL预准备语句的WHERE子句中使用通配符

来自分类Dev

如何在Mysql If子句中使用用户变量?

来自分类Dev

在SQL的where子句中使用变量作为列名

来自分类Dev

如何在MySQL的WHERE子句中使用OR&AND

来自分类Dev

在MySQL的where子句中使用多个表更新查询

来自分类Dev

在MySQL的WHERE子句中使用if / else结果别名

来自分类Dev

如何在WHERE子句中使用MySql MAX()

来自分类Dev

如何在使用python的orientdb查询的where子句中使用变量

来自分类Dev

MYSQL在WHERE子句中使用别名

来自分类Dev

使用 SELECT SQL 语句声明变量以在 WHERE 子句中使用

来自分类Dev

if else 在 mysql where 子句中使用

来自分类Dev

在 WHERE 子句中使用 varchar 局部变量

来自分类Dev

如何在 WHERE 子句中的变量中使用 AND

来自分类Dev

如何在mysql Where子句中传递变量

Related 相关文章

  1. 1

    是否可以在MySQL的where子句中使用当前的Dayname?

  2. 2

    JDBC MySql绑定变量语法错误在where子句中

  3. 3

    可以在WHERE子句中使用MySQL临时变量吗?

  4. 4

    在MySQL的where子句中使用substring_index

  5. 5

    在MySQL预准备语句的WHERE子句中使用通配符

  6. 6

    MySQL:强制查询在WHERE子句中使用带有局部变量的索引

  7. 7

    如何在WHERE子句中使用MySql MAX()

  8. 8

    无法在CLASS中的WHERE子句中使用无Sigilless变量?

  9. 9

    在mysql的where子句中使用未知长度的数组

  10. 10

    在mysql jdbc准备好的语句中使用“零”时间戳(在where子句中)

  11. 11

    JDBC MySql绑定变量语法错误在where子句中

  12. 12

    如何在where子句中使用mysql extract year

  13. 13

    MySQL-在WHERE子句中使用SHA2

  14. 14

    在WHERE子句中使用一串值-MySQL

  15. 15

    在Where子句中使用Mysql变量

  16. 16

    在MySQL预准备语句的WHERE子句中使用通配符

  17. 17

    如何在Mysql If子句中使用用户变量?

  18. 18

    在SQL的where子句中使用变量作为列名

  19. 19

    如何在MySQL的WHERE子句中使用OR&AND

  20. 20

    在MySQL的where子句中使用多个表更新查询

  21. 21

    在MySQL的WHERE子句中使用if / else结果别名

  22. 22

    如何在WHERE子句中使用MySql MAX()

  23. 23

    如何在使用python的orientdb查询的where子句中使用变量

  24. 24

    MYSQL在WHERE子句中使用别名

  25. 25

    使用 SELECT SQL 语句声明变量以在 WHERE 子句中使用

  26. 26

    if else 在 mysql where 子句中使用

  27. 27

    在 WHERE 子句中使用 varchar 局部变量

  28. 28

    如何在 WHERE 子句中的变量中使用 AND

  29. 29

    如何在mysql Where子句中传递变量

热门标签

归档