首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左加入字符串函数?

左加入字符串函数?
EN

Stack Overflow用户
提问于 2017-11-29 18:24:21
回答 2查看 448关注 0票数 0

我需要离开两张桌子:

  • 一张桌子上有电子邮件
  • 另一个表,是一个域黑名单。

我做了这样的事:

代码语言:javascript
复制
SELECT
   CASE 
      WHEN b.domain IS NULL then "Invalid"
      ELSE "Valid"
   END as Validated
FROM Emails e
LEFT JOIN DomainBlacklist b
ON ENDS_WITH(LOWER(e.email), LOWER(b.domain))

却让我犯了一个错误:

“如果没有连接两侧字段相等的条件,则不能使用左外部联接。”

有人知道我该怎么解决这个问题吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-29 18:52:38

下面是用于BigQuery标准SQL的

代码语言:javascript
复制
#standardSQL
SELECT email, 
  IF(MAX(ENDS_WITH(LOWER(email), LOWER(domain))), 'invalid', 'valid') AS Validated
FROM `project.dataset.Emails`
CROSS JOIN `project.dataset.DomainBlacklist`
GROUP BY email 

您可以使用以下虚拟数据测试/播放上述查询

代码语言:javascript
复制
#standardSQL
WITH `project.dataset.Emails` AS (
  SELECT email
  FROM UNNEST(['user1@abc.com','user2@abc.com','user3@uvw.com','user4@xyz.com']) AS email 
), `project.dataset.DomainBlacklist` AS (
  SELECT domain
  FROM UNNEST(['uvw.com','qwe.net']) AS domain
)
SELECT email, 
  IF(MAX(ENDS_WITH(LOWER(email), LOWER(domain))), 'invalid', 'valid') AS Validated
FROM `project.dataset.Emails`
CROSS JOIN `project.dataset.DomainBlacklist`
GROUP BY email 

结果是

代码语言:javascript
复制
email           Validated    
user1@abc.com   valid    
user2@abc.com   valid    
user3@uvw.com   invalid  
user4@xyz.com   valid    
票数 2
EN

Stack Overflow用户

发布于 2017-11-29 18:50:26

从理论上讲,应该可以用相等的方式将其表示为联接;您需要首先从电子邮件地址中删除@

代码语言:javascript
复制
SELECT
   CASE 
      WHEN b.domain IS NULL then "Invalid"
      ELSE "Valid"
   END as Validated
FROM Emails e
LEFT JOIN DomainBlacklist b
ON LOWER(SPLIT(e.email, '@')[SAFE_OFFSET(1)]) = LOWER(b.domain)

使用样本数据:

代码语言:javascript
复制
WITH Emails AS (
  SELECT 'elliott@example.com' AS email UNION ALL
  SELECT 'a@b.com' UNION ALL
  SELECT 'invalid_email' UNION ALL
  SELECT 'foo@bar.com'
), DomainBlacklist AS (
  SELECT 'example.com' AS domain UNION ALL
  SELECT 'bar.com'
)
SELECT
   CASE 
      WHEN b.domain IS NULL then "Invalid"
      ELSE "Valid"
   END as Validated
FROM Emails e
LEFT JOIN DomainBlacklist b
ON LOWER(SPLIT(e.email, '@')[SAFE_OFFSET(1)]) = LOWER(b.domain)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47559356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档