Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 是否可以使用where子句从<;选项卡>;分区<;部分。>;?_Sql_Oracle_Oracle10g_Partitioning - Fatal编程技术网

Sql 是否可以使用where子句从<;选项卡>;分区<;部分。>;?

Sql 是否可以使用where子句从<;选项卡>;分区<;部分。>;?,sql,oracle,oracle10g,partitioning,Sql,Oracle,Oracle10g,Partitioning,我有一个基于时间戳的表分区(比如partition1将有9个月的数据,partition2有6个月的数据,partition3有3个月的数据等等) 我需要根据特定分区上的条件删除数据 delete from table1 partition partition3 where group id in ( select * from table1 where group_code='pilot'); 此操作是否仅从第3部分删除?首先,语法是: delete from table1 partiti

我有一个基于时间戳的表分区(比如
partition1
将有9个月的数据,
partition2
有6个月的数据,
partition3
有3个月的数据等等)

我需要根据特定分区上的条件删除数据

delete from table1 partition partition3
where group id in ( select * from table1 where group_code='pilot'); 

此操作是否仅从
第3部分删除?

首先,语法是:

delete from table1 partition(partition3)
其次,您不应该引用分区名称。它创建了对表的物理布局的依赖关系。今天它可能每月分区一次,但将来可能会在几周或几天内重新分区。当这种情况发生时,您的代码将中断。Oracle可以从分区列上的谓词很好地推断分区。试着忘记正在分区的表

第三,由于将
select*
与ID进行比较,您的子选择将失败

您要查找的语句可能如下所示:

delete
  from table1
 where group_code = 'pilot'
   and partition_column = 'some value';

分区是透明的,这意味着您只需执行常规的

delete table1
 where group_id in (select group_id from table2 where group_code = 'pilot')
   and your_date_column
       between trunc(sysdate,'mm') - interval '3' month
           and trunc(sysdate,'mm') - interval '2' month
优化器将知道第二个谓词意味着只有来自partition3的数据需要删除

问候,
罗布