查询从一个 table 中选择列的文本类似于另一个 table 中的列

Query for selecting column from one table having text like column in another table

PostgreSQL 中有两个 table "Public domain" 和 "Emails" Public 域 table 在 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

我怎样才能做到这一点?

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 完全代表这个:"something" 然后是 @domain.

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