我正在使用NOT IN
运行一个更新语句,其中包含另一个查询,该查询返回了我一些签证号。
似乎也有一个错误,我无法追踪它,我怀疑我是否可以在 NOT IN
中使用查询。如果有人可以指出我在这里做错了什么。
Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
UPDATE HUDHAIFA.VISA_APP
SET VISA_NO=(LPAD(TRIM(VISA_NO),8,'0'))
WHERE LENGTH(VISA_NO) < 8
AND VISA_NO IS NOT NULL
AND VISA_NO NOT IN (
SELECT
CASE
WHEN LTRIM(VISA_NO, '0') IS NULL THEN VISA_NO
WHEN LTRIM(VISA_NO, '0') IS NOT NULL THEN LTRIM(VISA_NO, '0')
END as VISA_NO
FROM HUDHAIFA.VISA_APP
WHERE LENGTH(VISA_NO) < 8
GROUP BY CASE
WHEN LTRIM(VISA_NO, '0') IS NULL THEN VISA_NO
WHEN LTRIM(VISA_NO, '0') IS NOT NULL THEN LTRIM(VISA_NO, '0')
END
HAVING COUNT(*) > 1
ORDER BY VISA_NO asc
);
请尝试删除ORDER BY VISA_NO asc
并运行。它在句法上是不正确的,在您的情况下不需要。
通常,ORA-907通常不是consent的括号,而是含义'之类的东西附近存在语法错误,所以我无法想象您想要什么,猜测您应该关闭左括号打开之前的某个地方。在您的情况下,正如Bikash Ranjan Bhoi所说的那样,原因是ORDER BY
条款,对这种子查询毫无意义。
您还应该检查此子查询永远不会在其结果中产生NULL
。IN
和NOT IN
语句的工作都需要不为无效的值。