2017-09-17 2 views
0

Supposons que j'ai un tableau 1 comme ci-dessous:UPDATE dans plusieurs lignes d'une colonne avec des données d'une autre table dans MySQL

CREATE TABLE IF NOT EXISTS table1 
(
table1_id INT NOT NULL, 
field1 INT DEFAULT NULL, 
field2 INT DEFAULT NULL, 

FOREIGN KEY (field1) REFERENCES fields(field_id), 
FOREIGN KEY (field2) REFERENCES fields(field_id), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

et table2:

CREATE TABLE IF NOT EXISTS table2 
(
table2_id INT NOT NULL, 
another_id INT NOT NULL, 
field1 INT DEFAULT NULL, 

PRIMARY KEY (table2_id , another_id), 
FOREIGN KEY (another_id) REFERENCES table1(table1_id), 
FOREIGN KEY (field1) REFERENCES fields(field_id), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

J'ai rempli de données, les colonnes table1_idfield1, field2 du tableau 1 et table2_id, another_id du tableau 2.

Ce que je veux faire est de remplir avec des données la colonne field1 de table2. La chose est que je veux que ce soit la valeur field1 de table1 ou field2 de table1. Je veux que ce soit aléatoire. Si l'un des deux est NULL, sélectionnez l'autre, si les deux sont NULL.

Je peux simplement créer quelques requêtes UPDATES et faire les choses correctement. Malheureusement, je ne peux pas provoquer la table2 a plus de 5k lignes et je peux faire des requêtes UPKATE 5k. De plus je ne suis pas exactement sûr de savoir comment faire en sorte que MySQL choisisse au hasard l'un des deux champs de table1 comme décrit ci-dessus. Permettez-moi de vous donner ci-dessous un exemple de requête de ce que ce serait.

(je ne sais pas comment sélectionner au hasard des colonnes et des conditions, donc je vais laisser ça dans ma requête - Supposons que sur la condition aléatoire le résultat a été de sélectionner field1)

UPDATE table2 SET table2.field1 = (SELECT table1.field1 FROM table1 WHERE table1_id = another_id) WHERE another_id = X;

Je devrais répéter ce qui précède pour beaucoup de X différents.

Donc la question est de savoir comment remplir le field1 of table2 avec soit field1 or field2 from table1 avec les conditions décrites ci-dessus pour de nombreuses valeurs X?

Répondre

1

Pour choisir au hasard field1 ou field2, ou selon un non NULL:

UPDATE table2 SET table2.field1 = (
    SELECT 
     CASE 
      WHEN (table1.field1 IS NULL AND table1.field2 IS NULL) THEN NULL 
      WHEN (table1.field1 IS NULL) THEN table1.field2 
      WHEN (table1.field2 IS NULL) THEN table1.field1 
      ELSE IF(RAND() < 0.5, table1.field1, table1.field2) 
     END CASE 
    FROM table1 WHERE table1_id = another_id 
); 
+0

Vous avez pas ajouté le « non nulle » part, si vous voulez modifier votre anwser pour que je puisse l'accepter :) Ok –

+1

, voir ma réponse éditée. – kmoser