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