domain | email
------------|---------------------
banana.com | user@banana.com,user@gmail.com
pear.com | user@yahoo.com
grape.com | user@aol.com
我要删除“电子邮件”中未包含“域”的所有行。
因此,在上面的示例中,应该删除#2和#3,仅保留#1。
对于经验丰富的SQL用户来说,这可能很简单,但是作为一个新手,经过搜索,我不知道该怎么做。朝正确方向的任何领先者都将受到赞赏。
我正在使用PostgreSQL。
答案 0 :(得分:2)
答案 1 :(得分:1)
您可以使用not like
条件:
DELETE FROM mytable
WHERE email NOT LIKE '%' || domain || '%'
答案 2 :(得分:0)
在字符串中存储内容列表在SQL中是一个非常糟糕的主意。在Postgres中,您可以取消电子邮件的嵌套,然后与域进行比较:
select t.*
from t
where not exists (select 1
from unnest(string_to_array(str, ','::text)) u(email)
where u.email like '%@' || t.domain
);
这比“原始”字符串比较更安全,以防万一该域嵌入在电子邮件地址中,而不是整个域。