我有这个问题:
SELECT Company_Name FROM tblBeneficaries WHERE BeneficaryID IN ()
Run Code Online (Sandbox Code Playgroud)
当我执行它时,它返回消息:
')'附近的语法不正确.
问题是什么?
您的查询在读取时不应返回任何行,因为所需的 BeneficaryID 集为空。然而,这一语法无效,因为不幸的是,IN 子句必须至少包含一个值。为了表示空集,添加 NULL:
SELECT Company_Name FROM tblBeneficaries WHERE BeneficaryID IN (NULL);
Run Code Online (Sandbox Code Playgroud)
这在动态构建查询时非常有用,在该查询中,集合中最终会出现零个或多个元素,即(NULL)空集合或(NULL, 4, 16)数字 4 和 16 的集合。
它仍然是 IN 子句的一个恼人的限制,并且所示的技巧不适用于 NOT IN!(添加 NULL 会阻止您获取任何记录,因此您必须使用从未使用过的非空值,例如WHERE BeneficaryID NOT IN (-1))。
那是因为,你的IN子句没有参数/参数WHERE BeneficaryID IN ().它应该是WHERE BeneficaryID IN (id1,id2,id3, ...,idn)
您当前的查询与下面的说法相同,不需要WHERE条件
SELECT Company_Name FROM tblBeneficaries
Run Code Online (Sandbox Code Playgroud)