带有INNER JOIN的MySQL ISNULL

时间:2012-01-22 03:11:05

标签: php mysql ifnull

我有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,但这不起作用。查询不返回任何结果。如果共享表中没有记录,我想让percent_owner_old列显示为“0”。

感谢。

1 个答案:

答案 0 :(得分:1)

尝试将您的加入从shares更改为INNER JOIN {/ 1}}。

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_IDasset_ID,将其加入p中的匹配行。如果shares / {{1 }}存在于member_ID但不存在asset_ID,无论如何都会创建一行,并将相应的值设置为p“。

shares表示仅显示两个表中相关记录的连接行。

然后您可以与NULL结合使用。

相关问题