T1:
Users
name | meta_value
"Alex" | "hair_color=blonde"
.....
T2:
Banned_hair_colors
ban_date | color
"2020-01-01" | "blonde"
"2020-01-01" | "brown"
"2020-01-01" | "green"
您好,我需要根据头发颜色过滤users表,而不是显示Banned_hair_colors表中的那些。
SELECT * FROM `Users` WHERE
meta_value like "%blonde%"
and meta_value NOT IN (
SELECT color
FROM `Banned_hair_colors`
)
^当值为"blonde“时,上述查询有效
但是我需要一个“不喜欢”的解决方案,因为我在Users表中的值与我在Banned_hair_colors中的值不一样。
我尝试过不同的方法,但因为我将来自另一个表的值作为内部查询的结果,所以不确定如何使其工作。
我尝试过的:
SELECT * FROM `Users`
where
meta_value like "%blonde%"
and not exists (
SELECT 1 from `Banned_hair_colors`
where `Users`.meta_value like concat('%',`Banned_hair_colors`.color,'%')
)
我得到了这样的错误:没有连接两端的字段相等的条件,就不能使用LEFT ANTISEMI连接。
发布于 2020-09-14 21:48:28
下面是针对BigQuery标准SQL的说明
#standardSQL
SELECT * FROM `Users` WHERE meta_value LIKE "%blonde%"
EXCEPT DISTINCT
SELECT u.* FROM `Users` u
JOIN `Banned_hair_colors` b
ON meta_value LIKE CONCAT('%', color, '%')
https://stackoverflow.com/questions/63883684
复制相似问题