【问题标题】: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】:
您可以将substring 与position 函数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