【问题标题】:Can I use CASE in JOIN condition我可以在 JOIN 条件下使用 CASE
【发布时间】:2021-01-11 20:16:13
【问题描述】:

在 JOIN 语句中使用 CASE 时出现错误。下面是查询。我已经掩盖了内容。请让我知道我哪里出错了。因为它在我看来很好。也粘贴了错误。

SELECT
    S1.NR AS "a",
    S1.ZTV AS "b",
    S1.RNR AS "c",
    S1.TW AS "d",
    S1.STV AS "e",
    S1.RTV "f",
    S1.DA AS "v",
    CASE 
        WHEN S1.ZTV = '115' THEN 'T_RR' 
        ELSE ' ' 
    END AS "DT",
    ' ' AS "SiT",
    S1.S1JL AS "Ns",
    S1.S1JM AS "Vs",
    S1.S1JN AS "NSv",
    S1.S1JO AS "VSf",
    S1.S1JP AS "Vse",
    S1.S1JQ AS "Vde",
    S1.S1JR AS "Vds" 
FROM
    XXXX S1 
JOIN
    YYYYY B 
        ON S1.S1R1TW = B.BUKSCD 
        AND  (
            CASE 
                WHEN B1.BUSX != ' ' 
                AND S1.S1TV = B1.BTX THEN 1 
                WHEN S1.S1TV = B1.B2TX THEN 1
                ELSE 0

            END
        ) 

我收到以下错误 消息:[SQL0104] 令牌无效。有效标记: = != >= ¬ ¬= IN。原因 。 . . . . : 在标记处检测到语法错误。令牌不是有效令牌。有效标记的部分列表是 = != >= ¬ ¬= IN。此列表假定该语句在令牌之前是正确的。错误可能出现在语句的前面,但语句的语法在此之前似乎是有效的。恢复 。 . . :执行以下一项或多项操作并再次尝试请求: -- 验证令牌区域中的 SQL 语句。更正陈述。错误可能是缺少逗号或引号,可能是拼写错误的单词,也可能与从句的顺序有关。 -- 如果错误标记是 ,请更正 SQL 语句,因为它没有以有效的子句结尾。

【问题讨论】:

  • 此类问题可能取决于所使用的技术。您使用的是哪个数据库?如果功能支持,您可能还考虑将案例块移动到功能。
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。

标签: sql join db2 case


【解决方案1】:

这不是有效的 SQL:

       CASE WHEN B1.BUSX != ' ' AND S1.S1TV = B1.BTX THEN 1 
            WHEN S1.S1TV = B1.B2TX THEN 1
            ELSE 0

(尽管有些数据库确实支持它)。相反,请使用OR:

( (B1.BUSX <> ' ' AND S1.S1TV = B1.BTX) OR
  (B1.BUSX = ' ')
) 

我应该指出您可以使用CASE,但之后您需要进行一些比较:

  (CASE WHEN B1.BUSX != ' ' AND S1.S1TV = B1.BTX THEN 1 
        WHEN S1.S1TV = B1.B2TX THEN 1
   ELSE 0) = 1

不过,我认为基本的布尔运算更简单。

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 2021-01-10
    • 2021-01-15
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    相关资源
    最近更新 更多