使用其他表数据更新新表,在新表中进行少量修改

时间:2015-06-03 06:46:01

标签: sql oracle

我有一个名为“Input_Data”的表,如下所示,从这个表中我将获取其他表的输入值。

public class Update_Table
{
    private String tableName = "Test";
    private AmazonDynamoDBClient client =null;
	
    public void DynamoDBClient() throws IOException
    {
        AWSCredentials cred = new PropertiesCredentials(Update_Table.class
				.getResourceAsStream("AwsCredentials.properties"));
		
        client = new AmazonDynamoDBClient(cred);
    }
}

另一个表“Output_data”如下所示,此表将根据来自“Input_Data”的值进行更新

**TN         start_date   operator**
12345       12-May-2015       123
67890       14-May-2015       456

由于12345 source_id已经存在于Output_Data表中,在这种情况下,我想更新来自“Input_Data”表的source_id 12345的条目,使得“Output_Data”表中的先前条目将以新条目的start_date到期。并且将插入另一行用于新条目。因此“Output_Data”应如下所示:

**SOURCE_ID EFFECTIVE_DATE  EXPIRATION_DATE PROVIDER_ID**
  12345     01-Jan-2014                       555

我是SQL的新手,并尝试使用下面的一些查询执行上述任务:

**DEST_ID      EFFECTIVE_DATE   EXPIRATION_DATE PROVIDER_ID**
  12345          01-Jan-2014    12-May-2015       555
  12345          12-May-2015                      123
  67890          14-May-2015                      456

但是上面的查询甚至没有被执行,所以我无法检查输出。

1 个答案:

答案 0 :(得分:2)

在downvoting之前阅读这个:问题是贴有sqlserver,mysql和oracle的标签,oracle的答案尚未准备就绪,正在进行中

这适用于sql-server:

UPDATE output_data 
SET expiration_date =
(select start_date 
 FROM input_data 
 where TN = output_data.source_id);

 INSERT INTO output_data(source_id, effective_date,provider_id)
 SELECT TN,start_date,operator FROM input_data;

SQLFIDDLE

完全相同的代码适用于mysql:

SQLFIDDLE