BeG*_*een 1 mysql sql view case
我CASE在MYSQL中遇到了语句问题.它总是给我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)
);
Run Code Online (Sandbox Code Playgroud)
所以我正在进行一个简单的加入,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
);
Run Code Online (Sandbox Code Playgroud)
当我试图在这个视图上获取我的数据时c总是如此1.即使在原始表中B它被设置为1或WEEKDAY.
为什么我的CASE WHEN THEN陈述没有像我期望的那样发挥作用,我错过了什么?
你做了一件奇怪的事.你没有任何比较.我假设你打算:
(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,
Run Code Online (Sandbox Code Playgroud)
但不清楚哪个列名称.
我通常会这样写:
(case when <column> in ('0', 'WEEKDAY') then '0'
when <column> in ('1', 'WEEKEND') then '1'
else <column>
end) as c
Run Code Online (Sandbox Code Playgroud)
当目标值全部在一个地方时,我发现维护列表更容易.
在as c给出了表达式的名称.但是,表达式中的逻辑完全独立于给定的名称.所以,我建议:
(case when c in ('0', 'WEEKDAY') then '0'
when c in ('1', 'WEEKEND') then '1'
else c
end) as c
Run Code Online (Sandbox Code Playgroud)
当然,您不希望c在结果集中命名另一列.