我需要帮助来整理一个SQL,该SQL可以删除没有(metakey1或metakey2)和(没有注释)的用户
我有这个SQL可以对单个meta_key进行操作
urlExists(){
this.url = this.router.url
if(this.url == "/"){
return false;
}else{
return true;
}
}
我该如何扩展上述SQL?
答案 0 :(得分:1)
您可以在in
子句中使用on
:
SELECT u.*
FROM wp_users u LEFT JOIN
wp_usermeta um
ON u.ID = um.user_id AND
um.meta_key IN ('metakey1', 'metakey2', 'comments')
WHERE um.user_id IS NULL;
仅当 all 丢失了元键时,您才能获得匹配,这是您所要的。
编辑:
您似乎想要:
SELECT u.*
FROM wp_users u
WHERE NOT EXISTS (SELECT 1
FROM wp_usermeta um
WHERE u.ID = um.user_id AND
um.meta_key IN ('metakey1', 'metakey2')
) AND
NOT EXISTS (SELECT 1
FROM wp_comments c
WHERE u.ID = c.user_id
);
如果您要对不同的表进行多次比较,我更喜欢NOT EXISTS
。
答案 1 :(得分:1)
尝试使用存在子句进行删除,声明存在两个键之一的要求:
DELETE
FROM wp_users wp1
WHERE NOT EXISTS (SELECT 1 FROM wp_usermeta wp2
WHERE wp1.ID = wp2.user_id AND
wp2.meta_key IN ('metakey1', 'metakey2'));
请注意,我在上面编写的查询版本中不再需要以下where子句:
WHERE wp_usermeta.user_id IS NULL
已不再需要,因为NOT EXISTS
现在可以处理排除联接先前处理的工作。