MySQL - mise à JOUR basé sur une requête sur Requête SELECT
J'ai besoin de vérifier (à partir de la même table) si il existe une association entre deux événements en se basant sur la date-heure.
Un jeu de données contient la date de fin-des-temps de certains événements et de l'autre ensemble de données contiendra la date de départ en temps pour d'autres événements.
Si le premier événement se termine avant le deuxième événement, alors je voudrais les relier.
Ce que j'ai jusqu'à présent 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
Puis je me joindre à eux:
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 ensuite, en fonction de mon validation_check domaine, exécutez une requête de mise à JOUR avec le SELECT imbriqué?
- Je ne suis pas sûr de ce que vous demandez? Vous êtes à essayer de comprendre comment faire une mise à jour avec un Select SQL?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez réellement faire de deux façons:
MySQL mise à jour de la syntaxe de jointure:
ANSI SQL syntaxe:
Choisir celle qui semble la plus naturelle pour vous.
IF
condition de mettre à jour les champs. Grand, Yeppee.You can't specify target table ___ for update in FROM clause SQL.sql
tableA
=tableB
. Vous êtes obligés de créer une table temporaire pour stocker les résultats intermédiaires. (dû écrire une requête similaire pour un script de migration)Espérons que cela fonctionne pour vous.
Facile à MySQL:
Si quelqu'un cherche à mettre à jour les données d'une base de données à l'autre à n'importe quelle table ils sont de ciblage, il doit y avoir certains critères pour le faire.
C'est mieux et propre pour tous les niveaux:
Traaa! Il fonctionne très bien!
Avec l'entente ci-dessus, vous pouvez modifier l'ensemble des champs et de la "sur les" critères pour faire votre travail. Vous pouvez également effectuer les contrôles, puis tirez les données dans la table temporaire(s), puis exécutez la mise à jour en utilisant la syntaxe ci-dessus pour le remplacement de vos noms de table et colonne.
Espérons que cela fonctionne, si non faites le moi savoir. Je vais écrire une requête exacte pour vous.
Espère que cela va vous aider dans le cas où vous devez faire correspondre et de mise à jour entre deux tables.
J'ai trouvé cette question dans la recherche de mon propre solution à un très jointure complexe. C'est une solution alternative, pour une version plus complexe du problème, qui je pensais peut-être utile.
J'avais besoin pour remplir le product_id champ dans les activités de la table, où les activités sont numérotés dans une unité, et les unités sont numérotées dans un niveau (identifiés à l'aide d'une chaîne de caractères ??N), tels que l'on peut identifier des activités à l'aide d'un SKU ie L1U1A1. Ces Références sont ensuite stockés dans une table différente.
J'ai identifié le suivant pour obtenir une liste de activity_id vs product_id:-
J'ai trouvé que c'était trop complexe à intégrer dans un SELECT dans mysql, j'ai donc créé une table temporaire, et a rejoint avec l'instruction de mise à jour:-
J'espère que quelqu'un trouve ce utile
Vous pouvez mettre à jour les valeurs d'une autre table à l'aide d'une jointure interne comme ce
Suivez ici pour savoir comment utiliser cette requête http://www.voidtricks.com/mysql-inner-join-update/
ou vous pouvez utiliser le sélectionner en tant que sous-requête pour ce faire
requête expliqué en détails ici http://www.voidtricks.com/mysql-update-from-select/
Vous pouvez utiliser:
Pour la même table,
J'ai eu un problème avec des entrées en double dans une table elle-même. Ci-dessous les approches de travail pour moi. Il a également été préconisée par @sibaz.
Enfin je l'ai résolu en utilisant le dessous de requêtes:
La requête select est enregistré dans une table temporaire
La table temporaire est joint à la requête de mise à jour.
J'ai pas très connu avec SQL veuillez informer à une meilleure approche que vous connaissez.
Au-dessus de requêtes pour MySql server.
Vérifier avec la requête ci-dessous.
mettre à jour Un tableA
inner join tableB B sur A. name_a = B. name_b
ensemble validation_check = si(start_dts > end_dts, 'VALIDE', ")