Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询中的括号错误_Sql_Oracle_Oracle11g - Fatal编程技术网

SQL查询中的括号错误

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

我在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_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:您正在更新数据。排序在该上下文中没有任何意义。子选择中的排序依据没有任何意义。这完全没用,可能是你犯错的原因。