我在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。
答案 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');