1

idの両方が他のidと同じであるテーブルのcontracts値でテーブルを更新したい。contracts_history

私はこのコードを書きますが、動作しません:

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

1 つの列に更新しているため、subquery1 つの値のみを返す必要があります。

試す、

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、複数の値を持つ 1 つの列を更新できないため、select ステートメントに追加しました。そうしないと、エラー メッセージが表示されます。両方のテーブルを結合している 2 番目の部分は、 a.ID = b.ID両方のテーブルの関係です。これは、テーブルが互いにどのように関連しているかを定義します。SET a.row = b.columnNamecolumnName基本的に表にある値のソースです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 に答える