繁体   English   中英

SQL:此“ where if”查询有什么问题?

[英]SQL: whats wrong with this “where if” query?

我选择了表: A1并将A2联接到A1 ,而A3联接到A2
A1 .level和A2 .level始终不为null
A3 .level表示连接的行为null。
A1 .level大于A2 .level。
如果A3 .level小于A2 .level或设置为(NULL)
所以,我需要这样的结果

╔══════════╦══════════╦══════════╗
║ A1.level ║ A2.level ║ A3.level ║
╠══════════╬══════════╬══════════╣
║        3 ║        2 ║ 1        ║
║       14 ║       10 ║ 5        ║
║       15 ║       13 ║ (NULL)   ║
╚══════════╩══════════╩══════════╝

我试图写这样的声明

SELECT A1.level, A2.level, A3.level
FROM A1,
LEFT JOIN A2 ON A1.parentID = A2.id
LEFT JOIN A3 ON A2.parentID = A3.id
WHERE A1.level > A2.level
      AND A2.level > A3.level OR A3.level IS NULL

但这不起作用。 如何为此编写IF(或CASE)语句? 谢谢

您需要添加括号:

SELECT A1.level, A2.level, A3.level
FROM A1
JOIN A2  -- no need for LEFT JOIN
  ON A1.parentID = A2.id
LEFT JOIN A3
  ON A2.parentID = A3.id
WHERE (A1.level > A2.level)
      AND (A2.level > A3.level OR A3.level IS NULL)

否则,优先顺序为:

NOT - AND - OR

使用括号;

SELECT A1.level, A2.level, A3.level
FROM A1,
LEFT JOIN A2 ON A1.parentID = A2.id
LEFT JOIN A3 ON A2.parentID = A3.id
WHERE 
    (A1.level is not null and A2.level is not null) and --A1.level and A2.level always not null
    (A1.level > A2.level) and --A1.level is bigger then A2.level.
    (A2.level > A3.level OR A3.level IS NULL) --A3.level is smaller than A2.level or setted to (NULL)

我认为您犯了一个复制/粘贴错误(您在from之后指定了要选择的字段),并在错误的位置(第一次加入之前)添加了一个逗号。 此外,对于与A3有关的条件,您需要括号。 我个人认为在这种情况下不需要IF语句。

SELECT A1.level, A2.level, A3.level 
FROM A1
LEFT JOIN A2 ON A1.parentID = A2.id
LEFT JOIN A3 ON A2.parentID = A3.id
WHERE A1.level > A2.level
      AND (A2.level > A3.level OR A3.level IS NULL)

暂无
暂无

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

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