SQL将空值替换为自己的文本
我需要显示乐队列表中的键盘播放器,并且我已经能够使用以下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
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不支持。聚结是等效的。