[英]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.