SQL删除其中列_b不';不包含列a
我想删除“电子邮件”中不包含“域”的所有行 因此,在上面的例子中,应该删除#2和#3,只剩下#1 对于一个有经验的SQL用户来说,这可能很简单,但作为一个新手,在搜索之后,我不知道如何做到这一点。任何方向正确的领导都将不胜感激SQL删除其中列_b不';不包含列a,sql,postgresql,sql-delete,Sql,Postgresql,Sql Delete,我想删除“电子邮件”中不包含“域”的所有行 因此,在上面的例子中,应该删除#2和#3,只剩下#1 对于一个有经验的SQL用户来说,这可能很简单,但作为一个新手,在搜索之后,我不知道如何做到这一点。任何方向正确的领导都将不胜感激 我正在使用PostgreSQL。您可以使用不相似的条件: domain | email ------------|--------------------- banana.com | user@banana.com,user@gmail.com pear.co
我正在使用PostgreSQL。您可以使用
不相似的条件:
domain | email
------------|---------------------
banana.com | user@banana.com,user@gmail.com
pear.com | user@yahoo.com
grape.com | user@aol.com
在SQL中,以字符串形式存储事物列表是一个非常糟糕的主意。在Postgres中,您可以取消电子邮件的测试,然后与域进行比较:
DELETE FROM mytable
WHERE email NOT LIKE '%' || domain || '%'
这比“原始”字符串比较更安全,以防域嵌入到电子邮件地址中,而不是整个域。您可以将字符串函数用作:
select t.*
from t
where not exists (select 1
from unnest(string_to_array(str, ','::text)) u(email)
where u.email like '%@' || t.domain
);
MySQL中的|
?除非你启用了一些sql模式(PIPES_AS_CONCAT)@RaymondNijland-OP说“我在使用PostgreSQL”OP说“我在使用PostgreSQL”o甚至没有注意到..我看到了标签MySQL并浏览了MySQL标签。你可能想把单词边界逻辑放到比较中。
delete from tab where strpos(email,domain)=0;