我正在使用 BigQuery,无法理解为什么这两个查询不返回相同的行。
我想过滤其中包含“test”、“TEST”或“Test”一词的所有行。
查询#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%')`
我不明白为什么结果如此不同。
第一个查询不正确,因为
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
。