简体   繁体   English

MySQL-在CASE语句中使用NOT IN

[英]MySQL - Using NOT IN in CASE statement

I would like to somehow use the NOT IN term inside a CASE statement, but I'm getting a syntax error. 我想以某种方式在CASE语句中使用NOT IN术语,但出现语法错误。 I want is to set TribQin=0 whenever a certain number (14, in this case) does not appear within the T.Segment column. 我想要的是在T.Segment列中没有出现某个数字(在这种情况下为14)时将TribQin = 0设置为。

SELECT DISTINCT F.JDAY,     
    F.TL6 AS 'OriginalLayer',
    CASE
        WHEN 14 NOT IN T.Segment THEN 0
        ELSE 
                (SELECT T.flow
                FROM trib_data AS T
                WHERE T.JDAY<=F.JDAY AND T.Segment=14 AND T.Year=2000
                ORDER BY T.JDAY DESC LIMIT 1)
    END AS 'TribQin'
FROM FlexGridLayers AS F
INNER JOIN trib_data AS T
ON T.Segment=F.Segment
WHERE F.Year=2000 AND F.Segment=14
ORDER BY F.JDAY;

The error I'm getting is: 我得到的错误是:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'T.Segment THEN 0
        ELSE 
                (SELECT T.flow
                FROM trib_data AS T
                ' at line 4

Use this: 用这个:

CASE
    WHEN T.Segment != 14 THEN 0
    ELSE ...

You could try the below: 您可以尝试以下方法:

SELECT DISTINCT k.JDAY,     
    k.TL6 AS 'OriginalLayer',
    CASE
        WHEN k.kid is not null THEN 0
        ELSE 
                (SELECT T.flow
                FROM trib_data AS T
                WHERE T.JDAY<=F.JDAY AND T.Segment=14 AND T.Year=2000
                ORDER BY T.JDAY DESC LIMIT 1)
    END AS 'TribQin'
FROM ( select F.*,F2.id as kid from FlexGridLayers F 
       left outer join FlexGridLayers F2 on F.id=F2.id and F.Segment=14) k
INNER JOIN trib_data AS T
ON T.Segment=k.Segment
WHERE k.Year=2000 AND k.Segment=14
ORDER BY k.JDAY;

The query is to join the table by itself and on the value of segment=14 so that in this way we could know if the value 14 do exist across the column. 查询是将表本身与segment = 14的值连接起来,这样我们就可以知道该值是否确实存在于列中。

In MySQL, if 在MySQL中,如果

NOT

doesn't work, try 不起作用,请尝试

<>

(Less than or greater than, ie "not") (小于或大于,即“不”)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM