Coalesce和Any不能一起使用

时间:2018-07-05 22:13:50

标签: sql firebird firebird2.1

我正在尝试像这样运行命令:

SELECT PITANJEID, NASLOV, ODGOVOR1, ODGOVOR2, ODGOVOR3, ODGOVOR4, ODGOVOR5, POENA, PITANJE 
FROM KVIZ_PITANJA 
WHERE KVIZ_GRUPA_ID = COALESCE(@ID, ANY(SELECT KVIZ_GRUPA_ID FROM KVIZ_PITANJA))

问题出在这里我得到了错误:

  

令牌未知ANY

当我仅使用Coalesce(2, 1)运行命令时,它会正常运行。

当我仅使用Any(select kviz_grupa_id from kviz_pitanja)运行命令时,它也可以正常工作。

为什么将这两个命令放在一起会出现此错误?

如果用户将null作为参数完全不使用where命令作为参数,我想实现这一点,所以我想尝试这种方法。

1 个答案:

答案 0 :(得分:4)

SOME和ANY必须先进行比较操作(=,<,>等),因此将其嵌入到COALESCE中会导致错误。似乎您要说的是“如果有@ID,请先查找,否则返回所有内容。”如果是这样,您可以使用此结构(在SSRS应用程序中很常见):

SELECT PITANJEID, NASLOV, ODGOVOR1, ODGOVOR2, ODGOVOR3, ODGOVOR4, ODGOVOR5, POENA, PITANJE 
FROM KVIZ_PITANJA 
WHERE (KVIZ_GRUPA_ID = @ID OR @ID IS NULL)