2012-01-22 154 views
0

我有2個表格:「shares」和「pending_share_changes」。的「股份」表具有以下的列:MySQL ISNULL with INNER JOIN

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」。

謝謝。

回答

0

嘗試將您的加入sharesINNER 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_IDpasset_ID,它加入到匹配行shares。如果存在pmember_ID/asset_ID但不shares,使行反正,並設置相應的值NULL 」。

INNER JOIN表示僅顯示相關記錄存在於兩個表中的連接行。

然後你可以結合IFNULL(shares.percent_owner,0) AS percent_owner_old

+0

這是訣竅。我需要更多地閱讀左連接/內連接。謝謝!! – Progger