我需要帮助,整理一个SQL,可以删除没有(metakey1或metakey2)和(没有注释)的用户。

我有这个SQL可以为单个meta_key做到

SELECT *
FROM wp_users LEFT JOIN wp_usermeta
ON wp_users.ID = wp_usermeta.user_id
AND wp_usermeta.meta_key = 'metakey1'
WHERE wp_usermeta.user_id IS NULL


我如何扩展上述SQL来做到这一点?

最佳答案

您可以在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;


仅当所有元键都丢失时,您才能获得任何匹配项,我认为这是您要的。

编辑:

您似乎想要:

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

关于mysql - 用于WP的SQL删除具有多个元键和注释的用户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55142768/

10-09 02:30