如何在mysql数据库中使用枚举

时间:2010-06-30 02:20:37

标签: mysql database

我在MySQL数据库的表中使用了ENUM。如何获得type = a,b,c的所有内容?

简单地说,如果我使用VARCHAR,那么我可以使用:

SELECT * FROM stuff WHERE type IN ("a","b","c")

但是使用ENUM它不起作用。

如何获得type = a,b,c的所有内容?

注意:Type用作ENUM而不是CHAR或VARCHAR。

2 个答案:

答案 0 :(得分:1)

您可以像这样使用FIELD:

SELECT * FROM `stuff` WHERE FIELD(`type`, "a", "b", "c");

这应该是从您的问题中应用逻辑的正确语法。这一切归结为奇怪的类型转换问题与ENUM列表的工作方式 - 理想情况下,最好的方法是设置密钥关系,并使用包含以下内容的表:

TypesTbl
+---------------+
| AK  |  Value  |
+---------------+
|  1  |    a    |
|  2  |    b    |
|  3  |    c    |
+---------------+
Stuff
+------------------+
| PK  | * |  type  |
+------------------+
|  1  |   |   1    |
|  2  |   |   2    |
|  3  |   |   1    |
|  4  |   |   3    |
+------------------+

SELECT s.* FROM `Stuff` AS s LEFT JOIN `TypesTbl` t ON s.type = t.AK WHERE t.Value IN ('a', 'b', 'c');

这样,您在查询中使用左连接(或以任何方式),并且您不必更新DDL只是为了添加新的ENUMerated值。我相信答案的第一部分支持你要做的事情。第二部分只是附加信息。

答案 1 :(得分:0)

使用单引号:

SELECT * FROM stuff WHERE type IN ('a', 'b', 'c');