Case Statement总是给出1. MySQL

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)

所以我正在进行一个简单的加入,AB喜欢这样:

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它被设置为1WEEKDAY.

为什么我的CASE WHEN THEN陈述没有像我期望的那样发挥作用,我错过了什么?

Gor*_*off 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,
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在结果集中命名另一列.