我选择了表格: A1 并加入 A2 加入 A1 ,加入 A3 的 A2 即可。
A1 .level和 A2 .level始终不为空
A3 .level表示已加入的行为空
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)语句?感谢
答案 0 :(得分:3)
您需要添加括号:
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
答案 1 :(得分:2)
使用括号;
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)
答案 2 :(得分:0)
我认为你发了一个复制/粘贴错误(指定要在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)