如果值为NULL,则返回上级值

时间:2014-10-11 09:13:23

标签: mysql sql database

我有这个问题:

SELECT
    `mp__reference`.`referenceid`
    , `mp__reference`.`description`
    , `mp__reference`.`starts`
    , `mp__reference`.`ends`
FROM
    `mp`.`mp__portal`
INNER JOIN `mp`.`mp__revision` ON (`mp__portal`.`revisionidfk` = `mp__revision`.`revisionid`) 
INNER JOIN `mp`.`mp__campaign` ON (`mp__revision`.`campaignidfk` = `mp__campaign`.`campaignid`)
INNER JOIN `mp`.`mp__helperusergroupcampaign` ON (`mp__helperusergroupcampaign`.`campaignidfk` = `mp__campaign`.`campaignid`)
INNER JOIN `mp`.`mp__usergroup` ON (`mp__helperusergroupcampaign`.`usergroupidfk` = `mp__usergroup`.`usergroupid`)
INNER JOIN `mp`.`mp__helperuserusergroup` ON (`mp__helperuserusergroup`.`usergroupidfk` = `mp__usergroup`.`usergroupid`)
INNER JOIN `mp`.`mp__user` ON (`mp__helperuserusergroup`.`useridfk` = `mp__user`.`userid`)
INNER JOIN `mp`.`mp__position` ON (`mp__position`.`portalidfk` = `mp__portal`.`portalid`)
INNER JOIN `mp`.`mp__group` ON (`mp__group`.`positionidfk` = `mp__position`.`positionid`)
INNER JOIN `mp`.`mp__reference` ON (`mp__reference`.`groupidfk` = `mp__group`.`groupid`)
WHERE userid = $_SESSION['userid']
AND MD5(groupid) = $_SESSION['groupid']

您可以将实体:广告系列< - revision< - position< - group< - 引用为“daisychained”从上到下一起。

所有这些都包含“开始”和“结束”属性。

我需要检查是否设置了较低级别的值。如果没有,它将返回下一个上级值,如此伪代码:

if (reference.starts) then
  return reference.starts
else if (group.starts) then
  return group.starts
else if (position.starts) then
  return position.starts
etc... and the same thing for .ends

是的,我可以提取所有值,然后进行后期比较 - 但我想学习有效的SQL查询。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:3)

查看COALESCE功能:

COALESCE (reference.starts, group.starts, position.starts, ...);

将返回第一个非NULL值。