【问题标题】:MySQL ISNULL with INNER JOINMySQL ISNULL 与 INNER JOIN
【发布时间】:2012-02-16 00:50:57
【问题描述】:

我有 2 个表:“shares”和“pending_share_changes”。 “shares”表包含以下列:

share_ID, asset_ID, member_ID, percent_owner, is_approved

pending_share_changes 有以下列:

share_change_ID, asset_ID, member_ID, percent_owner, is_approved, requested_by

我有一个表格 (php),其中列出了成员必须批准或拒绝的未决更改。除非该成员没有现有共享,否则一切正常,这意味着“共享”表中没有他们的记录。我用来查看未决共享更改的查询如下:

SELECT p.share_change_ID, assets.asset_desc, assets.asset_value, shares.percent_owner AS 
          percent_owner_old, p.percent_owner 
          FROM pending_share_changes as p
          inner join assets on assets.asset_ID = p.asset_ID
          inner join shares on shares.asset_ID = p.asset_ID AND shares.member_ID = p.member_ID
          INNER JOIN orgs ON orgs.org_ID = assets.org_ID
          WHERE orgs.org_ID = '$org_ID' AND p.member_ID = '$member_ID' AND p.is_approved = '0'

我尝试使用 IFNULL(shares.percent_owner, 0) AS percent_owner_old 但这不起作用。查询不返回任何结果。如果 share 表中没有记录,我希望 percent_owner_old 列显示“0”。

谢谢。

【问题讨论】:

    标签: php mysql ifnull


    【解决方案1】:

    尝试将您的加入更改为 shares,从 INNER JOIN 更改为 LEFT JOIN

    SELECT ....
    FROM pending_share_changes p
    ....
    LEFT JOIN shares ON shares.asset_ID = p.asset_ID AND shares.member_ID = p.member_ID
    

    这意味着“对于p 中的每个member_IDasset_ID,将其连接到shares 中的匹配行。如果member_ID/asset_ID 存在于p 而不是shares , 无论如何做一行并将对应的值设置为NULL"。

    INNER JOIN 表示仅显示两个表中存在相关记录的连接行。

    然后就可以和IFNULL(shares.percent_owner,0) AS percent_owner_old结合了。

    【讨论】:

    • 这就是诀窍。我需要阅读更多关于左连接/内连接的内容。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2012-05-30
    • 2012-05-28
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多