2012-01-22 14 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' 

私はAS percent_owner_old IFNULL(shares.percent_owner、0)を使用してみましたが、それは動作しませんでした。クエリは結果を返しません。共有テーブルにレコードがない場合、%_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 

これはp内のすべてのmember_IDasset_IDための」手段、sharesに一致する行への参加。pなくsharesに存在member_ID/asset_ID場合、とにかく行を作成し、NULLに対応する値を設定します"

INNER JOINは、関連するレコードが両方のテーブルにある場合にのみ結合された行を表示することを意味します。テーブル。

次に、IFNULL(shares.percent_owner,0) AS percent_owner_oldと組み合わせることができます。

+0

それはトリックでした。私は左の結合/内部の結合にもっと読む必要があります。ありがとう!! – Progger