簡體   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