Je dois vérifier (à partir du même tableau) s'il y a une association entre deux événements basés sur la date et l'heure.
Un ensemble de données contiendra la date-heure de fin de certains événements et l'autre ensemble de données contiendra la date-heure 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'à présent, c'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 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 ensuite, en fonction de mon champ validation_check, exécuter une requête UPDATE avec le SELECT imbriqué?
mysql
select
sql-update
John M
la source
la source
Réponses:
Vous pouvez en fait le faire de deux manières:
Syntaxe de jointure de mise à jour MySQL:
Syntaxe SQL ANSI:
Choisissez celui qui vous semble le plus naturel.
la source
You can't specify target table ___ for update in FROM clause SQL.sql
tableA
=tableB
. Vous êtes obligé de créer une table temporaire pour stocker le résultat intermédiaire. (a dû écrire une requête similaire pour un script de migration)J'espère que cela fonctionne pour toi.
la source
Facile dans MySQL:
la source
Si quelqu'un cherche à mettre à jour des données d'une base de données à une autre, quelle que soit la table qu'il cible, il doit y avoir des critères pour le faire.
Celui-ci est meilleur et propre pour tous les niveaux:
Traaa! Ça marche super!
Avec la compréhension ci-dessus, vous pouvez modifier les champs définis et les critères "on" 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 à l'aide de la syntaxe ci-dessus en remplaçant les noms de table et de colonne.
J'espère que cela fonctionne, sinon faites le moi savoir. Je vais vous écrire une requête exacte.
la source
J'espère que cela vous aidera dans le cas où vous devez faire correspondre et mettre à jour entre deux tables.
la source
J'ai trouvé cette question en recherchant ma propre solution à une jointure très complexe. Il s'agit d'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é à l'aide d'une chaîne ?? N), de sorte que l'on puisse identifier les activités à l'aide d'une SKU, c'est-à-dire L1U1A1. Ces références sont ensuite stockées dans une table différente.
J'ai identifié les éléments suivants pour obtenir une liste de activity_id vs product_id: -
J'ai trouvé que c'était trop complexe pour être incorporé dans un SELECT dans mysql, alors j'ai créé une table temporaire, et je l'ai jointe à l'instruction de mise à jour: -
J'espère que quelqu'un trouve cela utile
la source
la source
Vous pouvez mettre à jour les valeurs d'une autre table à l'aide d'une jointure interne comme celle-ci
Suivez ici pour savoir comment utiliser cette requête http://www.voidtricks.com/mysql-inner-join-update/
ou vous pouvez utiliser select as subquery pour ce faire
requête expliquée en détails ici http://www.voidtricks.com/mysql-update-from-select/
la source
Vous pouvez utiliser:
la source
Pour la même table,
la source
J'ai eu un problème avec les entrées en double dans une table elle-même. Ci-dessous, les approches fonctionnaient pour moi. Il a également été préconisé par @sibaz.
Enfin, je l'ai résolu en utilisant les requêtes ci-dessous:
La requête de sélection est enregistrée dans une table temporaire
La table temporaire est jointe à la requête de mise à jour.
Je ne suis pas très expérimenté avec SQL, veuillez conseiller une meilleure approche que vous connaissez.
Les requêtes ci-dessus concernent le serveur MySql.
la source