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 :)
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.
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
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.
vous pouvez utiliser la commande UPDATE.
UPDATE table_name SET name=@name, email=@email, phone=@phone WHERE client_id=@client_id