我正在设置一个数据集,其中我使用一个主表,其中包含销售人员的姓名、连锁店的id和名称以及他们拥有的每个品牌的名称,如以下示例数据:
salesperson chain_id chain_name brand_name
pepito 28 chairs4all sitnice
jaimito 34 eatdrinkeat Drink & eat
pepito 28 chairs4all AwwwChairs!
susanita 56 something Anything
jaimito 567 last One
在另一个表中,我有一个列,上面有每个商店的名称,我想将每个商店附加到它的品牌上。但存储名称可能会附加位置或其他信息,如来自另一个表的示例数据:
store_name
sitnice
AwwwChairs! Seville
One 34
SitNice nº12
Drink & eat North road 23
我想要最后一张这样的table:
salesperson chain_id chain_name brand_name store_name
pepito 28 chairs4all sitnice sitnice
jaimito 34 eatdrinkeat Drink & eat Drink & eat North
pepito 28 chairs4all AwwwChairs! AwwwChairs! Seville
susanita 56 something Anything null
jaimito 567 last One one 34
pepito 28 chairs4all sitnice SitNice nº12
所以我想我必须把商标名和商店名这两个表连接起来。我试过这个:
SELECT brand_name, salesperson, chain_name, chain_id, store_name
FROM data
cross join
data2
where
brand_name like CONCAT('%', store_name,'%')
这没有返回预期结果。它返回的记录比预期的要少,并且只匹配一些预期的记录。我还尝试了regexp\u contains并强制另一个连接,但由于我没有其他字段可以连接,所以效果非常差。谢谢
1条答案
按热度按时间6rqinv9w1#
使用您的示例数据,我能够创建一个标准的sql查询来实现所需的输出。我在bigquery中上传了两个表,其中一个叫做
chain_name
第二张table呢store_name
分别使用共享的第一块和第二块数据。为了交叉连接两个表
brand_name
在里面store_name
(除了品牌名称外,还可能包含商店的地址),我使用了having子句,它过滤掉在对bool表达式求值时不返回true的行。此外,regex_contains()如果分析的表达式是部分匹配的,则返回true。下面是问题,
以及输出,
请注意,lower()用于匹配名称,尽管可能存在一些小写字母/标题字母的差异。