我一直在处理一些位列。我必须根据第三列选择一列或另一列。那不是我的问题。这是一个简化的示例,以显示我遇到的情况。
CREATE TABLE Testing (
ColType TINYINT(6),
Type1 BIT(1) DEFAULT b'0',
Type2 BIT(1) DEFAULT b'0'
);
请注意,在“真实世界”场景中,ColType 通常通过外键加入。
INSERT INTO Testing
(ColType, Type1, Type2)
VALUES
(1, 0, 0),
(1, 0, 1),
(1, 1, 0),
(1, 1, 1),
(2, 0, 0),
(2, 0, 1),
(2, 1, 0),
(2, 1, 1);
这将创建 3 列的所有可能组合。以下是我使用此数据运行的查询。
SELECT
*,
IF(ColType = 1, Type1, Type2) Output1,
(CASE WHEN ColType = 1 THEN Type1 ELSE Type2 END) Output2,
IF(ColType = 1, CAST(Type1 AS SIGNED), CAST(Type2 AS SIGNED)) Output3,
IF(ColType = 1, Type1=1, Type2=1) Output4
FROM
Testing;
CREATE TEMPORARY TABLE Describer
SELECT
*,
IF(ColType = 1, Type1, Type2) Output1,
(CASE WHEN ColType = 1 THEN Type1 ELSE Type2 END) Output2,
IF(ColType = 1, CAST(Type1 AS SIGNED), CAST(Type2 AS SIGNED)) Output3,
IF(ColType = 1, Type1=1, Type2=1) Output4
FROM
Testing;
DESCRIBE Describer;
SELECT * FROM Describer;
结果是:
ColType Type1 Type2 Output1 Output2 Output3 Output4
1 0 0 0 0 0 0
1 0 1 0 0 0 0
1 1 0 0 0 1 1
1 1 1 0 0 1 1
2 0 0 0 0 0 0
2 0 1 0 0 1 1
2 1 0 0 0 0 0
2 1 1 0 0 1 1
----------
Field Type Null Key Default Extra
ColType tinyint(6) YES
Type1 bit(1) YES b'0'
Output1 int(1) unsigned YES b'1'
Output2 int(1) unsigned YES NULL
Output3 int(1) YES NULL
Output4 int(1) YES NULL
----------
ColType Type1 Type2 Output1 Output2 Output3 Output4
1 0 0 0 0 0 0
1 0 1 0 0 0 0
1 1 0 1 1 1 1
1 1 1 1 1 1 1
2 0 0 0 0 0 0
2 0 1 1 1 1 1
2 1 0 0 0 0 0
2 1 1 1 1 1 1
我的问题是:为什么此查询的某些版本有效而其他版本无效?我希望临时表保持与第一个选择中显示的值相同的值,但显然情况并非如此。那么为什么会出现所有这些数据不匹配的情况呢?
编辑: 我在 Windows 7 上使用 MySql Workbench 6.3.6 Community。