我在MYSQL中遇到CASE
语句问题。它总是给我1。
以下是我的两张表:
CREATE TABLE A (
a VARCHAR(200),
b VARCHAR(200),
c VARCHAR(200),
PRIMARY KEY (a)
);
CREATE TABLE B (
a VARCHAR(200),
d VARCHAR(200),
e VARCHAR(200)
FOREIGN KEY (a) REFERENCES A(a)
);
所以我正在A
和B
进行简单的加入:
CREATE VIEW C AS (
SELECT
a,
b,
CASE
WHEN '0' THEN '0'
WHEN '1' THEN '1'
WHEN 'WEEKDAY' THEN '0'
WHEN 'WEEKEND' THEN '1'
ELSE ''
END AS c,
d,
e
FROM
B
RIGHT OUTER JOIN A ON
B.a = A.a
);
当我尝试在此视图中获取数据时c
始终为1
。即使在原始表B
中,它也会设置为1
或WEEKDAY
。
为什么我的CASE WHEN THEN
声明没有像我预期的那样发挥作用,我错过了什么?
答案 0 :(得分:7)
你做了一件奇怪的事。你没有任何比较。我假设你打算:
(CASE <COLUMN NAME GOES HERE!!!>
WHEN '0' THEN '0'
WHEN '1' THEN '1'
WHEN 'WEEKDAY' THEN '0'
WHEN 'WEEKEND' THEN '1'
ELSE ''
END) AS c,
目前还不清楚哪个列名称。
我通常把它写成:
(case when <column> in ('0', 'WEEKDAY') then '0'
when <column> in ('1', 'WEEKEND') then '1'
else <column>
end) as c
当目标值全部在一个地方时,我发现维护列表更容易。
as c
给出了表达式的名称。但是,表达式中的逻辑完全独立于给定的名称。所以,我建议:
(case when c in ('0', 'WEEKDAY') then '0'
when c in ('1', 'WEEKEND') then '1'
else c
end) as c
当然,您不希望在结果集中使用另一个名为c
的列。
答案 1 :(得分:0)
CREATE VIEW C AS (
SELECT
a,
b,
CASE C
WHEN '0' THEN '0'
WHEN '1' THEN '1'
WHEN 'WEEKDAY' THEN '0'
WHEN 'WEEKEND' THEN '1'
ELSE ''
END AS c,
d,
e
FROM
B
RIGHT OUTER JOIN A ON
B.a = A.a
);