0

我有 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”。

谢谢。

4

1 回答 1

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

这意味着“对于每个member_IDand asset_IDin p,将其加入到匹配行 in shares。如果member_ID/asset_ID存在于p但不存在shares,则无论如何创建一行并将相应的值设置为NULL”。

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

然后你可以结合IFNULL(shares.percent_owner,0) AS percent_owner_old.

于 2012-01-22T04:27:47.797 回答