簡體   English   中英

當我在 Snowflake 中運行我的查詢時,它會繼續運行,但如果沒有 OR 語句,它會在幾秒鍾內運行

[英]When I run my query in Snowflake it keeps running but without the OR statement is runs in merely seconds

我有一個查詢,其中我 select 來自兩個表的 3 列。 首先,我檢查客戶編號是否在列表中,為此我使用了“IN”語句。 然后我檢查 clientnumber 是否也在另一個表中,以便兩個數字相等。

最后我想排除以某個值結尾的值。 這就是問題所在。

當我只有一個“NOT LIKE”時,它運行得很好,但是當我使用“OR NOT LIKE”之后它繼續運行。

請參閱下面的查詢:

SELECT "MAIL_ADDR", "ClientNumber", "CNumber" 
FROM "ADRESSES", CUSTOMERS
WHERE "ClientNumber" IN ('0000206302','0000206307','0000206309','0000206321'                                        
    AND "ClientNumber" = "CNumber"
    AND "MAIL_ADDR" NOT LIKE '%domain.nl' 
    OR "MAIL_ADDR" NOT LIKE '%domain.com'

我不知道要在我的查詢中更改什么,因為我沒有從 Snowflake 收到任何錯誤消息。 也許它與性能問題有關。

可以重寫查詢以使用 JOIN 語法,排除條件應與AND連接:

SELECT "MAIL_ADDR", "ClientNumber", "CNumber" 
FROM "ADRESSES"
JOIN CUSTOMERS
  ON "ClientNumber" = "CNumber"
WHERE "ClientNumber" IN ('0000206302','0000206307','0000206309','0000206321')
    AND "MAIL_ADDR" NOT LIKE '%domain.nl' 
    AND "MAIL_ADDR" NOT LIKE '%domain.com';

一種更緊湊的方法是使用NOT LIKE ANY語法:

SELECT "MAIL_ADDR", "ClientNumber", "CNumber" 
FROM "ADRESSES"
JOIN CUSTOMERS
  ON "ClientNumber" = "CNumber"
WHERE "ClientNumber" IN ('0000206302','0000206307','0000206309','0000206321')       
 AND NOT ("MAIL_ADDR" LIKE ANY ('%domain.nl', '%domain.com'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM