查询从一个表中选择具有类似另一表中的列的文本的列

时间:2018-09-25 13:26:13

标签: sql postgresql sql-like

PostgreSQL中有两个表 “公共域”和“电子邮件”公共域表在列1中列出了域列表,例如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

我该如何实现?

2 个答案:

答案 0 :(得分:4)

demo: db<>fiddle

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

将表格与它们的文本相对应。普通(CROSSJOIN消除了所有不匹配的行。匹配函数为email LIKE %@domain。因为email == something@domain联接起作用。 LIKE %@domain的确切含义是:“某物”,然后是@domain

答案 1 :(得分:0)

您可以将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