Query

返回具有多個 LIKE 和 NOT LIKE 要求的結果

  • July 27, 2021

我正在嘗試創建一個僅選擇一組值但不包括其他值的查詢。

我選擇的列稱為“參與者”,其中的值不是單個文本項,而是以逗號分隔的項目列表(長度和項目數量不同),例如:“Alpha、Delta、Eta”或值:“Beta、Gamma 或值:“Delta、Beta、Epsilon、Theta、Vau”。

我編寫此查詢是為了嘗試獲取僅包含 Delta、Eta、Epsilon 和 Vau 等值但不包含 Alpha、Beta、Gamma 的結果(這意味著我不希望值:“Alpha, Delta, Eta”包括在內,但我想要以下值:“Delta,Zeta,Epsilon”)

SELECT DISTINCT Name, Category, CODE, Participants
WHERE(Participants NOT LIKE '%Alpha%'
     OR Participants NOT LIKE '%Beta%'
     OR Participants NOT LIKE '%Gamma%')
    AND (Participants LIKE '%Delta%'
         OR Participants LIKE '%Eta%'
         OR Participants LIKE '%Epsilon%'
         OR Participants LIKE '%Vau%');

結果包括查詢的 LIKE 部分中指定的所有值,但 NOT LIKE 似乎不起作用,因為我不斷收到以下結果:“Alpha,Eta,Epsilon。

我可以在 Access 中創建多個查詢以使用 LIKE 查詢然後使用 NOT LIKE 進行過濾,但我想找到一種在單個查詢中執行此操作的方法。

線上我只能找到查詢中有一個 LIKE 和一個 NOT LIKE 的範例

有人可以提出解決方案嗎?

在評估 NOT LIKE 時的查詢中,您應該使用 AND 而不是 OR,因為您希望滿足所有這些條件。

SELECT DISTINCT
   Name,
   Category,
   CODE,
   Participants
WHERE (Participants NOT LIKE '%Alpha%'
     AND Participants NOT LIKE '%Beta%'
     AND Participants NOT LIKE '%Gamma%')
    AND (Participants LIKE '%Delta%'
         OR Participants LIKE '%Eta%'
         OR Participants LIKE '%Epsilon%'
         OR Participants LIKE '%Vau%');

這與您希望任何值都是在使用 AND 時選擇的 LIKE 值的後續條件形成對比。

或者,您可以改寫為:

WHERE NOT
     (Participants LIKE '%Alpha%'
   OR Participants LIKE '%Beta%'
   OR Participants LIKE '%Gamma%'
     )
 AND (Participants LIKE '%Delta%'
   OR Participants LIKE '%Eta%'
   OR Participants LIKE '%Epsilon%'
   OR Participants LIKE '%Vau%'
     );

引用自:https://dba.stackexchange.com/questions/295860