1

我想通过表中contracts的值更新表,contracts_history其中两个 id 都相同。

我写了这段代码但不工作:

function recover_contract($contract_id)
{
$sql = "UPDATE contracts SET ROW = (SELECT * FROM contracts_history WHERE contracts.ID = contracts_history.ID)";
$result = $this->update($sql);
return $result;
}

更新:
我使用此代码

update 
contracts a, 
contracts_history b 
set 
a.name_surname=b.name_surname 

但是我的表有 64 个结构,对于复制所有数据而没有所有结构的类型,没有任何解决方案吗?必须这样:

$sql = "INSERT INTO `contracts_history` SELECT * FROM `contracts` 
        WHERE id='$contract_id'";
4

3 回答 3

2

你可以试试这个作为你的查询吗?

$sql = "UPDATE contracts c 
        LEFT JOIN contracts_history h ON c.ID = h.ID 
        SET WHAT_YOU_WANT";
于 2012-09-10T03:10:36.060 回答
2

由于您要更新到一列,因此您subquery应该只返回一个值。

尝试,

UPDATE contracts 
SET ROW = (SELECT columnName
           FROM contracts_history 
           WHERE contracts.ID = contracts_history.ID
           LIMIT 1)

或通过使用使用JOIN

UPDATE contracts a
       INNER JOIN contracts_history b
       ON a.ID = b.ID
SET    a.row = b.columnName

更新 1

行。所以在这里,在使用子查询中的值更新的第一种类型上,我LIMIT在 select 语句中添加了因为你不能更新一个包含多个值的列,否则你会收到一条错误消息。在连接两个表的第二部分是两个表 a.ID = b.ID的关系。这定义了表如何相互关联。SET a.row = b.columnName,columnName是基本上表的值的来源contracts_history

于 2012-09-10T03:14:22.390 回答
2

语法如下:

update 
    contracts a, 
    contracts_history b 
set 
    a.col1=b.col1, 
    a.col2=b.col2 
where 
    a.id=b.id 

不过,在那张纸条上,您没有在查询中指定 ID,这意味着它将更新历史表中的所有行。您可以像这样添加条件:

update 
    contracts a, 
    contracts_history b 
set 
    a.col1=b.col1, 
    a.col2=b.col2 
where 
    a.id=b.id 
    and a.id=3
于 2012-09-10T03:14:41.420 回答