繁体   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