使用 not in 语句 Oracle 更新查询
Posted
技术标签:
【中文标题】使用 not in 语句 Oracle 更新查询【英文标题】:Update query with not in statement Oracle 【发布时间】:2017-12-20 07:06:21 【问题描述】:我正在运行一个带有 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
);
【问题讨论】:
【参考方案1】:请尝试删除ORDER BY VISA_NO asc
并运行。它在语法上不正确,在您的情况下不需要。
【讨论】:
【参考方案2】:通常,ORA-907 通常不使用右括号,而是表示“这个地方附近有语法错误,所以我无法想象你想要什么,我猜你应该关闭之前在某处打开的左括号”。在您的情况下,正如 Bikash Ranjan Bhoi 所说,原因是 ORDER BY
子句对此类子查询毫无意义。
您还应该检查该子查询是否永远不会在其结果中产生NULL
。 IN
和 NOT IN
语句都需要非空值集。
【讨论】:
以上是关于使用 not in 语句 Oracle 更新查询的主要内容,如果未能解决你的问题,请参考以下文章