使用 SQL 过滤(WHERE 子句)

问题描述 投票:0回答:1

我正在使用 BigQuery,无法理解为什么这两个查询不返回相同的行。

我想过滤其中包含“test”、“TEST”或“Test”一词的所有行。

  • 符合此条件的总行数约为 6,000 行。因此,我的最终查询应该返回总行数减去 6,000。
  • 运行第一个查询时,差异约为 2,463,051,所以我确信存在错误。
  • 第二个查询正确过滤掉 6,000 行。

查询#1:

SELECT
    *
FROM 
    rides
WHERE 
    NOT (start_station_name LIKE '%test%' OR
         start_station_name LIKE '%Test%' OR
         start_station_name LIKE '%TEST%')`

查询#2:

SELECT 
    *
FROM 
    rides 
WHERE 
    ride_id NOT IN (SELECT *
                    FROM rides
                    WHERE start_station_name LIKE '%test%' OR
                          start_station_name LIKE '%Test%' OR
                          start_station_name LIKE '%TEST%')`

我不明白为什么结果如此不同。

sql google-bigquery subquery where-clause
1个回答
0
投票

第一个查询不正确,因为

NOT
运算符应该应用于单个条件,而不是一组条件。

要使用

NOT
运算符,您应该说明每个条件,例如:

SELECT
    *
FROM
    rides
WHERE
    NOT (start_station_name LIKE '%test%')
    AND NOT (start_station_name LIKE '%Test%')
    AND NOT (start_station_name LIKE '%TEST%')

此外,执行

NOT IN (element1,element2)
也可以,因为它是一个条件而不是列表,但是,不可能同时使用
LIKE
IN

© www.soinside.com 2019 - 2024. All rights reserved.