2014-03-31 47 views
0

我做了很多形式MySQL的选择和表达与枚举

SELECT `u` AS `A`, `v` as B, TRUE AS `IsFirst`, FALSE AS `IsSecond` from `first` 
UNION 
SELECT `x` AS `A`, `y` AS B, FALSE AS `IsFirst`, TRUE as `IsSecond` from `second` 

和这样的查询,通常使它们成为意见,当然。

而不是有一堆与他们的布尔列我宁愿使用ENUM,我想过使用整数值而不是单独的列,但这可能会导致错误(行名称是自我解释,一个名为Source的列值为2不是),我不想使用字符串的原因很明显。

我想使用ENUM,但我不知道(如果可以的话,我也不会发现)用enum表达式编写SELECT。我已经尝试了很明显的:

SELECT CAST("A", ENUM("A","B")); 
SELECT CAST(1, ENUM("A","B")); 

和一些其他人也是语法错误,但他们从绝望,我真的不抱任何希望。 MySQL文档列出了支持的类型,而ENUM不是其中之一,以上是我在尝试知道之前所尝试的内容。

我可以继续使用列,它只是一个ENUM会更好。

这是否有语法? (也许从视角?)

回答

-1

ENUM values are always strings;在ENUM()定义中给出的值必须是带引号的字符串文字,并且必要时由MySQL自动处理强制转换。 (从技术上讲,你可以在ENUM()的定义指定整数文字,但像你期望它不会工作;详见链接的文档页面。)

这样:

CREATE TABLE test (id serial, 
        foo ENUM("A", "B") NOT NULL, 
        bar ENUM("3", "4") NOT NULL); 

INSERT INTO test (foo, bar) 
     VALUES ("A", 3), ("B", 4); 

SELECT * FROM test; 
+----+-----+-----+ 
| id | foo | bar | 
+----+-----+-----+ 
| 1 | A | 3 | 
| 2 | B | 4 | 
+----+-----+-----+ 

SELECT COUNT(*) AS n FROM test WHERE foo = "A"; 
+---+ 
| n | 
+---+ 
| 1 | 
+---+ 

SELECT COUNT(*) AS n FROM test WHERE bar = "4"; 
+---+ 
| n | 
+---+ 
| 1 | 
+---+ 

-- automatic cast from integer to string in the WHERE clause, 
-- which reduces to the previous query and matches row with id 2 
SELECT COUNT(*) AS n FROM test WHERE bar = 4; 
+---+ 
| n | 
+---+ 
| 1 | 
+---+ 
+1

这不回答这个问题是因为它创建了一个表格,请尝试“选择5;”作为一个查询,我想要做这样的事情,而不是一个整数,一个枚举成员。 –

+0

该表仅作为示例出现,并且在该上下文中是必需的,因为ENUM仅在DDL语句(即CREATE TABLE,ALTER TABLE和friends)中有意义。 SELECT中的ENUM没有意义,这就是为什么它是一个语法错误;一旦你定义了一个ENUM列,你从它那里得到的东西总是一个字符串(或者如果你定义列允许的话,它是NULL),你可以从那里投射。 (您的问题并不十分清楚,但如果您想要紧密处理许多布尔值,请尝试[BIT(bitfield)列](https://dev.mysql.com/doc/refman/5.0/en/位type.html)。) –