MySQL ISNULL с внутренним соединением - PullRequest
0 голосов
/ 22 января 2012

У меня есть 2 таблицы: «акции» и «pending_share_changes».В таблице «общих ресурсов» есть следующие столбцы:

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 (доли.percent_owner, 0) в процентах_пользователя, но это не сработало.Запрос не возвращает результатов.Я хотел бы, чтобы в столбцеcent_owner_old отображался «0», если в таблице общих ресурсов нет записей.

Спасибо.

1 Ответ

1 голос
/ 22 января 2012

Попробуйте изменить ваше объединение на 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_ID и asset_ID в p, присоедините его к соответствующей строке в shares. Если member_ID / asset_ID существует в p, но не shares в любом случае сделайте строку и установите соответствующие значения на NULL ".

INNER JOIN означает показывать только соединенные строки, где соответствующая запись существует в обеих таблицах.

Тогда вы можете комбинировать с IFNULL(shares.percent_owner,0) AS percent_owner_old.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...