【问题标题】:SQL - how to remove whole row if one of the column in subquery return NULLSQL - 如果子查询中的一列返回 NULL,如何删除整行
【发布时间】:2021-09-07 04:08:54
【问题描述】:

我被困在 1 个 SQL 查询中

SELECT u.*,

um2.meta_value as parent_user_id,
( select u.user_email FROM wp_users u WHERE u.ID = um2.meta_value ) AS parent_user_email

FROM

wp_users u 

JOIN wp_usermeta um2 ON u.ID = um2.user_id
AND um2.meta_key = 'parent_user_id'

GROUP BY
u.ID

此查询返回 4 行(如屏幕截图所示)

我想要这样的场景:如果子查询返回 NULL ,则不会显示整行。 所以在这个例子中 "childthree" 不应该显示,因为 "parent_user_email" 是 NULL ,所以整个第三行需要删除

【问题讨论】:

    标签: mysql sql wordpress select subquery


    【解决方案1】:

    改用join

    SELECT u.*, um2.meta_value as parent_user_id,
           u2.user_email as parent_user_email
    FROM wp_users u JOIN
         wp_usermeta um2
         ON u.ID = um2.user_id AND
            um2.meta_key = 'parent_user_id' JOIN
         wp_users u2
         ON u2.ID = um2.meta_value
    GROUP BY u.ID;
    

    注意:这假定电子邮件值本身绝不是NULL。如果可以,请添加WHERE u2.user_email IS NOT NULL

    此外,您的查询应该会失败,因为GROUP BY 列与SELECT 不一致。但是,从逻辑上讲,这似乎没问题,因为每个user 只有一个家长和用户电子邮件。但是,我会将这些列包含在 GROUP BY 中。

    【讨论】:

    • 这里的情况是父用户从“wp_user”表中删除,但“parent_user_id”条目仍然存在于“wp_usermeta”表中
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    相关资源
    最近更新 更多