web-dev-qa-db-fra.com

MySQL direct INSERT INTO avec la clause WHERE

J'ai essayé de googler ce problème, mais je ne trouve que faire en utilisant deux tableaux, comme suit:

INSERT INTO tbl_member
SELECT Field1,Field2,Field3,... 
FROM temp_table
WHERE NOT EXISTS(SELECT * 
         FROM tbl_member 
         WHERE (temp_table.Field1=tbl_member.Field1 and
               temp_table.Field2=tbl_member.Field2...etc.)
        )

Cela a fonctionné pour un scénario, mais maintenant, mon intérêt est de télécharger des données directement depuis le programme lui-même sans utiliser deux tableaux. Ce que je veux, c'est télécharger les données qui ne sont pas dans la table. Le sql que j'avais dans la tête était comme celui-ci,

INSERT INTO tbl_member (SensorIdValue, DataTimeValue, DataInValue, IncompleteValue, SpiValue, InfoValue)
VALUES ('Sensor.org', '20121017150103', 'eth0','','','')
WHERE (SensorIdValue != 'Sensor.org'AND DataTimeValue != '20121017150103'AND DataInValue != 'eth0'AND IncompleteValue != ''AND SpiValue != ''AND InfoValue != '');

Mais c'est faux .. puis-je savoir la bonne façon de le faire s'il vous plaît, merci beaucoup :)

10
Hasitha Shan

La syntaxe INSERT ne peut pas avoir la clause WHERE. La seule fois où vous trouverez INSERT avec la clause WHERE, c’est lorsque vous utilisez l’instruction INSERT INTO...SELECT.

La première syntaxe est déjà correcte.

15
John Woo

Exemple d’exécution d’une instruction INSERT INTO SELECT avec une clause WHERE.

INSERT INTO #test2 (id) SELECT id FROM #test1 WHERE id > 2
1
Pomster

Si je comprends bien, l’objectif est d’insérer un nouvel enregistrement dans une table, mais si les données sont déjà sur la table: sautez-le! Voici ma réponse:

INSERT INTO tbl_member 
(Field1,Field2,Field3,...) 
SELECT a.Field1,a.Field2,a.Field3,... 
FROM (SELECT Field1 = [NewValueField1], Field2 = [NewValueField2], Field3 = [NewValueField3], ...) AS a 
LEFT JOIN tbl_member AS b 
ON a.Field1 = b.Field1 
WHERE b.Field1 IS NULL

L'enregistrement à insérer est dans les nouveaux champs de valeur.

0
user1286858

vous pouvez utiliser la commande UPDATE.

UPDATE table_name SET name=@name, email=@email, phone=@phone WHERE client_id=@client_id
0
Rj Raawat