【问题标题】:Query for selecting column from one table having text like column in another table从一个表中选择列的查询,该表中的文本类似于另一表中的列
【发布时间】:2018-09-25 13:26:12
【问题描述】:

PostgreSQL中有两张表 “公共域”和“电子邮件”公共域表在 column1 中有一个域列表,例如abcd.com、xyz.com 等。

Table-"Public domain"
sr.no domains
1      yahoo.com
2      gmail.com
3      hotmail.com

Table-"Emails"
sr.no  emails
1      abcd@gmail.com
2      efgh@hotmail.com
3      pqr@xyz.com

The query should return:
abcd@gmail.com
efgh@hotmail.com

我怎样才能做到这一点?

【问题讨论】:

标签: sql postgresql sql-like


【解决方案1】:

demo: db<>fiddle

SELECT 
    email 
FROM emails e 
JOIN domains d 
ON e.email LIKE '%@' || d.domain

根据文本加入表格。正常 (CROSS) JOIN 会消除所有不匹配的行。匹配函数为email LIKE %@domain。因为email == something@domain 加入有效。 LIKE %@domain 正好代表这个:“某事”,然后是 @domain

【讨论】:

    【解决方案2】:

    您可以将substringposition 函数as 一起使用:

    select e.emails
      from Emails as e
      join PublicDomain as p
        on ( substring(e.emails,position('@' in e.emails)+1,length(e.emails)) = p.domains );
    
    emails
    ---------------
    abcd@gmail.com
    efgh@hotmail.com
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2022-11-28
      • 2018-01-28
      • 2018-05-22
      • 2011-03-30
      相关资源
      最近更新 更多