【发布时间】:2016-09-26 04:40:41
【问题描述】:
我一直在处理一些位列。我必须根据第三列选择一列或另一列。 这不是我的问题。 这是一个简化的示例来展示我遇到的情况。
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 社区。p>
【问题讨论】:
标签: mysql if-statement select mysql-5.7