SQL查询中的括号错误
我在Oracle数据库中使用了以下查询:SQL查询中的括号错误,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我在Oracle数据库中使用了以下查询: UPDATE test5_rdf_memoization SET object ='galib' WHERE ( predicate='platform' AND object IS NULL AND subject IN ( SELECT subject FROM test5_rdf_memoization t1, test_parameters_new
UPDATE test5_rdf_memoization
SET object ='galib'
WHERE ( predicate='platform' AND
object IS NULL AND
subject IN ( SELECT subject
FROM test5_rdf_memoization t1,
test_parameters_new_5 t2,
test_parameter_detail t3
WHERE (t1.object = t2.id AND
t2.id = t3.parameter AND
t1.predicate = 'parameter' AND
t3.host_tool_detail = 1 AND
(t1.subject >= 624))
order by t1.subject) );
但它给了我以下的错误
Error starting at line 1 in command:
UPDATE test5_rdf_memoization SET
object ='galib' WHERE ( predicate='platform' AND object IS NULL AND
subject IN ( SELECT subject FROM test5_rdf_memoization t1,
test_parameters_new_5 t2, test_parameter_detail t3 WHERE (t1.object =
t2.id AND t2.id = t3.parameter AND t1.predicate = 'parameter' AND
t3.host_tool_detail = 1 AND (t1.subject >= 624)) order by t1.subject)
)
Error at Command Line:2 Column:10 Error report: SQL Error:
ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
我试过使用不同的括号组合,但不起作用。谁能帮我一下吗?试试这个--我只觉得在你的语句中需要一组括号。我还删除了orderby
语句:
UPDATE test5_rdf_memoization
SET object ='galib'
WHERE predicate='platform'
AND object IS NULL
AND subject IN (
SELECT subject
FROM test5_rdf_memoization t1,
test_parameters_new_5 t2,
test_parameter_detail t3
WHERE t1.object = t2.id
AND t2.id = t3.parameter
AND t1.predicate = 'parameter'
AND t3.host_tool_detail = 1
AND t1.subject >= 624)
我更喜欢使用内部联接
,不过:
UPDATE test5_rdf_memoization
SET object ='galib'
WHERE predicate='platform'
AND object IS NULL
AND subject IN (
SELECT subject
FROM test5_rdf_memoization t1
INNER JOIN test_parameters_new_5 t2
ON t1.object = t2.id
INNER JOIN test_parameter_detail t3
ON t2.id = t3.parameter
WHERE t1.predicate = 'parameter'
AND t3.host_tool_detail = 1
AND t1.subject >= 624)
Oracle经常抛出ORA-00907:缺少右括号
以指示语法错误,通常是因为它在找到匹配的括号之前发现了非法子句
在这种情况下,它反对
ORDER BY子句。我们无法订购此类子查询。事实上,排序并不重要,因为语句只是测试记录的存在性,所以谁在乎我们是先随机查找记录,还是先按字母数字排序?很明显,排序会消耗CPU周期,所以从性能角度看,不必要的排序是不好的,但它不会改变结果
“我需要按主题排序的数据。” 不,你没有。您正在更新
test5\u rdf\u memorization
中的所有记录,这些记录将一组特定的条件匹配到相同的值。因此,它们的更新顺序也无关紧要,因为结果是一样的
如果您对此解释不满意,请编辑您的问题以解释您的业务需求,以便我们提供一个可行的解决方案。我需要按主题排序的数据。如果在之前删除订单,则数据不会排序。如果您有任何想法,请告诉我。@user2151087:您正在更新数据。排序在该上下文中没有任何意义。子选择中的排序依据没有任何意义。这完全没用,可能是你犯错的原因。