mysql update kolumna z wartością z innej tabeli

Mam dwa stoły, oba wyglądają jak

id  name  value
===================
1   Joe     22
2   Derk    30

Muszę skopiować wartość value z tableA do tableB na podstawie nazwy kontrolki w każdej tabeli.

Jakieś wskazówki dla tego UPDATE Oświadczenia?

Author: fedorqui, 2012-07-29

6 answers

Oprócz tej odpowiedzi, jeśli trzeba zmienić t1.wartość według t2.wartość dynamicznie można wykonać na przykład:

UPDATE tableB
INNER JOIN tableA ON tableB.name = tableA.name
SET tableB.value = IF(tableA.value > 0, tableA.value, tableB.value)
WHERE tableA.name = 'Joe'
 290
Author: RafaSashi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-15 12:35:30

Musisz dołączyć do dwóch tabel:

Na przykład chcesz skopiować wartość name z tableA do tableB gdzie mają tę samą ID

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.id = t2.id
SET t1.name = t2.name 
WHERE t2.name = 'Joe'

UPDATE 1

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.id = t2.id
SET t1.name = t2.name 

UPDATE 2

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.name = t2.name
SET t1.value = t2.value
 127
Author: John Woo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-29 12:07:28

Druga możliwość to,

UPDATE TableB 
SET TableB.value = (
    SELECT TableA.value 
    FROM TableA
    WHERE TableA.name = TableB.name
);
 72
Author: Samir Alajmovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-15 12:36:09

Druga opcja jest wykonalna również, jeśli używasz trybu bezpiecznego aktualizowania (i pojawia się błąd wskazujący, że próbowałeś zaktualizować tabelę bez gdzie, który używa kolumny kluczowej), dodając:

UPDATE TableB  
SET TableB.value = (  
SELECT TableA.value  
    FROM TableA  
    WHERE TableA.name = TableB.name  
)  
**where TableB.id < X**  
;
 3
Author: raul7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 07:39:21

-- Przechowuj dane w tabeli temp Select * into tempTable from table1

-- now Update the column Aktualizacja tabely1 Ustaw tabelę 1.FileName = (select FileName from where tempTable.id = table1.ID);

 0
Author: Abid Mahmood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-15 14:12:42

Jeśli masz wspólne pole w obu tabelach, to jest to takie proste !....

Table-1 = Tabela, w której chcesz zaktualizować. Table - 2 = Tabela, w której pobierasz dane.

  1. wykonaj zapytanie w Table - 1 i znajdź wspólną wartość pola.
  2. wykonaj pętlę i znajdź wszystkie dane z tabeli-2 zgodnie z wartością tabeli 1.
  3. ponownie wykonaj zapytanie aktualizacyjne w tabeli 1.

$qry_asseet_list = mysql_query("SELECT 'primary key field' FROM `table-1`");

$resultArray = array();
while ($row = mysql_fetch_array($qry_asseet_list)) {
$resultArray[] = $row;
}



foreach($resultArray as $rec) {

    $a = $rec['primary key field'];

    $cuttable_qry = mysql_query("SELECT * FROM `Table-2` WHERE `key field name` = $a");

    $cuttable = mysql_fetch_assoc($cuttable_qry);



    echo $x= $cuttable['Table-2 field']; echo " ! ";
    echo $y= $cuttable['Table-2 field'];echo " ! ";
    echo $z= $cuttable['Table-2 field'];echo " ! ";


    $k = mysql_query("UPDATE `Table-1` SET `summary_style` = '$x', `summary_color` = '$y', `summary_customer` = '$z' WHERE `summary_laysheet_number` = $a;");

    if ($k) {
        echo "done";
    } else {
        echo mysql_error();
    }


}
 -2
Author: Mahabubur Rahman Masum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-22 18:06:19