SQL将空值替换为自己的文本

SQL将空值替换为自己的文本,sql,postgresql,Sql,Postgresql,我需要显示乐队列表中的键盘播放器,并且我已经能够使用以下SQL: SELECT BAND.NAME AS Band_Name, KBPLAYER.NAME AS Keyboard_Player FROM BAND FULL OUTER JOIN ( SELECT M.NAME, MO.BID FROM MEMBEROF MO, MEMBER M WHERE MO.INSTRUMENT='keyboards' AND M.MID=MO.MID ) KBPLA

我需要显示乐队列表中的键盘播放器,并且我已经能够使用以下SQL:

SELECT BAND.NAME AS Band_Name, KBPLAYER.NAME AS Keyboard_Player
FROM BAND
FULL OUTER JOIN (
    SELECT M.NAME, MO.BID
    FROM MEMBEROF MO, MEMBER M
    WHERE MO.INSTRUMENT='keyboards'
    AND M.MID=MO.MID
    ) KBPLAYER
ON BAND.BID=KBPLAYER.BID
ORDER BY BAND.NAME, KBPLAYER.NAME
上面的查询显示了该乐队中所有乐队和键盘播放器(如果有)的名称,但我还想为那些没有键盘播放器的乐队显示“没有键盘播放器”。我怎样才能做到这一点?如果您需要我提供桌子结构的详细信息,请告诉我

更新:请注意,我无法使用任何
SQL3过程(
COALESCE,CASE,IF..ELSE
)。它需要严格遵守SQL3标准。

使用该函数。此函数返回它的第一个非空参数。例如:

COALESCE(KBPLAYER.NAME,'No KeyBoard Players') AS Keyboard_Player

根据您将空字符串替换为某些文本的注释,简单的解决方案是使用下面的case语句

SELECT BAND.NAME AS Band_Name, 
CASE WHEN KBPLAYER.NAME = '' THEN 'No Player' ELSE KBPLAYER.NAME END AS Keyboard_Player
FROM BAND
FULL OUTER JOIN (
    SELECT M.NAME, MO.BID
    FROM MEMBEROF MO, MEMBER M
    WHERE MO.INSTRUMENT='keyboards'
    AND M.MID=MO.MID
    ) KBPLAYER
ON BAND.BID=KBPLAYER.BID
ORDER BY BAND.NAME, KBPLAYER.NAME
试试这个

    SELECT BAND.NAME AS Band_Name, 
ISNULL(NULLIF(KBPLAYER.NAME,''),'No KeyBoard Players') AS Keyboard_Player
    FROM BAND
    FULL OUTER JOIN (
        SELECT M.NAME, MO.BID
        FROM MEMBEROF MO, MEMBER M
        WHERE MO.INSTRUMENT='keyboards'
        AND M.MID=MO.MID
        ) KBPLAYER
    ON BAND.BID=KBPLAYER.BID
    ORDER BY BAND.NAME, KBPLAYER.NAME

如果允许使用NVL,则以下命令应有效

NVL(KBPLAYER.NAME, 'No KeyBoard Players')

我决定用不同的方式来做,因为我不打算使用上面的SQL。如果有人对上述带有设置约束的SQL提出建议,我将不胜感激

SELECT 
  band.name AS Band_Name, 'NULL' AS Keyboard_Player
FROM 
  memberof
INNER JOIN 
 member
ON 
  memberof.mid = member.mid 
FULL JOIN 
  band
ON 
  memberof.bid = band.bid 
AND 
  instrument = 'keyboards'

WHERE  
  member.name IS NULL 

UNION

SELECT 
  band.name AS Band_Name, member.name AS Keyboard_Player
FROM 
  memberof
INNER JOIN 
 member
ON 
  memberof.mid = member.mid 
FULL JOIN 
  band
ON 
  memberof.bid = band.bid 
WHERE
  instrument = 'keyboards'

我刚刚更新了我的标签。只需检查NVL,它可能会帮助您。如果没有键盘播放器,它是否会为您提供NULL?它不会显示NULL;只是一个空字段,表示它为空。那么您想将空字段替换为一些文本吗?这是可行的-除了我的赋值要求的一部分是我不能使用COALESCE。有没有其他方法可以让我研究?你可以使用案例陈述吗?请用任何约束条件更新您的问题,如不允许使用的函数更新。请参考上述内容。感谢您向我介绍
COALESCE
,这将在我的另一项作业中非常有用。感谢Naveen-但我刚刚按照Harmic的建议,用特定约束更新了我的问题。我收到错误:函数isnull(文本,未知)不存在。isnull正在检查列的值是否为NULL,但在本例中,它有空字符串。因此Is null不起作用。因此,我添加了
NULLIF
参见上面的queryOh yes。。我往里面一看,很好。:)我得到“错误:函数nvl(字符变化,未知)不存在”。问题被标记为postgresql-nvl是非标准的,postgresql不支持。聚结是等效的。