我想要contracts
表中的值更新表contracts_history
,其中id都与其他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'";
答案 0 :(得分:2)
您可以尝试将其作为查询吗?
$sql = "UPDATE contracts c
LEFT JOIN contracts_history h ON c.ID = h.ID
SET WHAT_YOU_WANT";
答案 1 :(得分: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
确定。所以,在第一种使用子查询中的值进行更新的类型中,我在select语句中添加了LIMIT
,因为您无法更新一个包含多个值的列,否则您将收到错误消息。在连接两个表的第二部分上,a.ID = b.ID
是两个表的关系。这定义了表格如何相互关联。 SET a.row = b.columnName
,columnName
是值的来源,基本上位于表contracts_history
上。
答案 2 :(得分:2)
语法如下:
update
contracts a,
contracts_history b
set
a.col1=b.col1,
a.col2=b.col2
where
a.id=b.id
但是,在该注释中,您没有在查询中指定ID,这意味着它将更新 ALL 历史记录表中的行。您可以添加以下条件:
update
contracts a,
contracts_history b
set
a.col1=b.col1,
a.col2=b.col2
where
a.id=b.id
and a.id=3