代码之家  ›  专栏  ›  技术社区  ›  Ira Gromov

雪花-操作员除外

  •  0
  • Ira Gromov  · 技术社区  · 2 年前

    我是SQL新手——我的公司正在使用Snowflake,我尝试使用EXCEPT运算符编写查询。根据文档,我应该能够使用它——但它似乎不起作用(例如,UNION,工作正常)。有什么建议我做错了什么吗?

    1 回复  |  直到 2 年前
        1
  •  0
  •   Simeon Pilgrim    2 年前
    SELECT column1 FROM VALUES (1),(2)
    EXCEPT
    SELECT column1 FROM VALUES (2);
    

    只产生值1

    专栏1
    1.

    MINUS 是同一个概念,只是不同的名字。

    SELECT column1 FROM VALUES (2)
    MINUS 
    SELECT column1 FROM VALUES (1),(2)
    

    但是,不返回任何行,因为第二个集合中的2会对单行2求反。

    两者都是左外联接的一种形式,通过左联接和WHERE中的空检查来实现。

    所以 ((2)) minus ((1),(2)) 与以下内容相同:

    WITH data1(col1) as (
        SELECT column1 FROM VALUES (2)
    ), data2(col1) as (
        SELECT column1 FROM VALUES (1),(2)
    )
    SELECT d1.col1
    FROM data1 AS d1
    LEFT JOIN data2 AS d2
        ON d1.col1 = d2.col1
    WHERE d2.col1 IS NULL;
    

    返回零行,它们都出现在秒表中。