une - update table mysql




Requête MySQL-UPDATE basée sur la requête SELECT (7)

Je dois vérifier (à partir de la même table) s'il existe une association entre deux événements basés sur la date et l'heure.

Un ensemble de données contiendra la date et l'heure de fin de certains événements et l'autre ensemble de données contiendra la date de début pour d'autres événements.

Si le premier événement se termine avant le deuxième événement, je voudrais les relier.

Ce que j'ai jusqu'ici est:

SELECT name as name_A, date-time as end_DTS, id as id_A 
FROM tableA WHERE criteria = 1


SELECT name as name_B, date-time as start_DTS, id as id_B 
FROM tableA WHERE criteria = 2

Ensuite, je les rejoins:

SELECT name_A, name_B, id_A, id_B, 
if(start_DTS > end_DTS,'VALID','') as validation_check
FROM tableA
LEFT JOIN tableB ON name_A = name_B

Puis-je, en fonction de mon champ validation_check, exécuter une requête UPDATE avec le SELECT imbriqué?


Facile en MySQL:

UPDATE users AS U1, users AS U2 
SET U1.name_one = U2.name_colX
WHERE U2.user_id = U1.user_id

J'ai trouvé cette question en cherchant ma propre solution à une jointure très complexe. C'est une solution alternative, à une version plus complexe du problème, que je pensais être utile.

Je devais remplir le champ product_id dans la table des activités, où les activités sont numérotées dans une unité, et les unités sont numérotées dans un niveau (identifié par une chaîne ?? N), de sorte que l'on puisse identifier les activités en utilisant L1U1A1. Ces SKU sont ensuite stockés dans une table différente.

J'ai identifié ce qui suit pour obtenir une liste de activity_id vs product_id: -

SELECT a.activity_id, w.product_id 
FROM activities a 
JOIN units USING(unit_id) 
JOIN product_types USING(product_type_id) 
JOIN web_products w 
  ON sku=CONCAT('L',SUBSTR(product_type_code,3), 'U',unit_index, 'A',activity_index)

J'ai trouvé que c'était trop complexe à incorporer dans un SELECT dans mysql, donc j'ai créé une table temporaire, et je l'ai rejoint avec l'instruction update: -

CREATE TEMPORARY TABLE activity_product_ids AS (<the above select statement>);

UPDATE activities a JOIN activity_product_ids b ON a.activity_id=b.activity_id 
  SET a.product_id=b.product_id;

J'espère que quelqu'un trouve cela utile


Si quelqu'un cherche à mettre à jour les données d'une base de données à une autre, quelle que soit la table ciblée, il doit y avoir des critères pour le faire.

Celui-ci est meilleur et propre pour tous les niveaux:

update dbname1.content targetTable

left join dbname2.someothertable sourceTable on
    targetTable.compare_field= sourceTable.compare_field
set
    targetTable.col1  = sourceTable.cola
    ,targetTable.col2 = sourceTable.colb 
    ,targetTable.col3 = sourceTable.colc 
    ,targetTable.col4 = sourceTable.cold 

Traaa! Cela fonctionne très bien!

Avec la compréhension ci-dessus, vous pouvez modifier les champs set et "sur" les critères pour faire votre travail. Vous pouvez également effectuer les vérifications, puis extraire les données dans les tables temporaires, puis exécuter la mise à jour en utilisant la syntaxe ci-dessus en remplaçant les noms de table et de colonne.

Espérons que cela fonctionne, sinon laissez-moi savoir. Je vais écrire une requête exacte pour vous.


Vous pouvez mettre à jour les valeurs d'une autre table en utilisant la jointure interne comme ceci

UPDATE [table1_name] AS t1 INNER JOIN [table2_name] AS t2 ON t1.column1_name] = t2.[column1_name] SET t1.[column2_name] = t2.column2_name];

Suivez ici pour savoir comment utiliser cette requête http://www.voidtricks.com/mysql-inner-join-update/

ou vous pouvez utiliser select comme sous-requête pour le faire

UPDATE [table_name] SET [column_name] = (SELECT [column_name] FROM [table_name] WHERE [column_name] = [value]) WHERE [column_name] = [value];

requête expliquée en détails ici http://www.voidtricks.com/mysql-update-from-select/


Vous pouvez utiliser:

UPDATE Station AS st1, StationOld AS st2
   SET st1.already_used = 1
 WHERE st1.code = st2.code

    UPDATE 
  receipt_invoices dest,
  (SELECT 
    `receipt_id`,
    CAST((net * 100) / 112 AS DECIMAL (11, 2)) witoutvat 
  FROM
    receipt 
  WHERE CAST((net * 100) / 112 AS DECIMAL (11, 2)) != total 
    AND vat_percentage = 12) src 
SET
  dest.price = src.witoutvat,
  dest.amount = src.witoutvat 
WHERE col_tobefixed = 1 
  AND dest.`receipt_id` = src.receipt_id ;

J'espère que cela vous aidera dans un cas où vous devez faire correspondre et mettre à jour entre deux tables.


UPDATE table1 dest, (SELECT * FROM table2 where id=x) src 
  SET dest.col1 = src.col1 where dest.id=x ;

J'espère que cela fonctionne pour toi.







sql-update