0

我想使用简单的 sql 选择一些数据并将这些数据插入到另一个表中。两张表是一样的。数据类型和列名都相同。只是那些是主表的临时表。使用单个 sql 我想将这些数据插入到另一个表中,并在 where 条件下检查 E_ID=? 检查部分。我的另一个问题是有时表中可能有任何匹配的行。在那个时候是不是可能出sql异常?另一个问题是它可能是多个匹配的行。这意味着一个 E_ID 可能有多行。例如,在我的 attachment_master 和 attachments_temp 表中,一个 ID 具有多行。我该如何解决这些问题?我还有一个问题。我的主表数据可以使用以下代码插入临时表。但我只想更改一列,其他列是相同的数据。

    insert into dates_temp_table SELECT * FROM master_dates_table where e_id=?;

在这里,所有数据都插入到我的 dates_temp_table 中。但我想添加所有列数据并仅将 dates_temp_table 状态列更改为“已修改”。我应该如何更改此代码?

4

3 回答 3

2

你可以试试这个:

insert into table1 ( col1, col2, col3,.... ) 
SELECT  col1, col2, col3, ....
FROM   table2 where (you can check any condition here on table1 or table2 or mixed)

有关更多信息,请查看此处类似的问题 ,希望对您有所帮助。

编辑:如果我正确理解您的要求,那么这对您来说可能是一个有用的解决方案:

insert into table1 ( col-1, col-2, col-3,...., col-n, <Your modification col name here> ) 
    SELECT  col-1, col-2, col-3,...., col-n, 'modified'
    FROM table2 where table1.e_id=<your id value here>

根据您在上述其他答案中的评论:

“我发送我的 E_ID。我不想匹配和获取。我发送我的 E_ID,如果该 ID 可用,我将这些数据插入我的临时表并将临时表状态更改为‘已修改’,否则不做任何事情。 "

根据您的上述陈述,如果给定 e_id ,它会将所有列值复制到您的 table1 并在您的 table1 的“状态”列中放置一个值“修改”

欲了解更多信息,请看这里

于 2013-09-12T03:57:02.650 回答
0
insert into tablename( column1, column2, column3,column4 ) SELECT  column1,
column2, column3,column4 from anothertablename where tablename.ID=anothertablename.ID

如果有多个值,那么它将返回最后一个结果..如果没有,您缩小了搜索范围..

于 2013-09-12T03:58:29.763 回答
0

如果我正确理解您的要求,您可以使用合并语句。

文档

由于我没有下面的表格结构是基于假设的,请查看这是否满足您的要求。我假设 e_id 是主键或根据您的表设计进行更改。

MERGE INTO   dates_temp_table trgt
      USING  (SELECT * FROM master_dates_table WHERE e_id=100) src
          ON     (trgt.prm_key = src.prm_key)  
WHEN NOT MATCHED
THEN
    INSERT       (trgt.col, trgt.col2, trgt.status)
         VALUES  (src.col, src.col2, 'Modified');

更多信息和示例在这里

于 2013-09-12T06:43:38.447 回答