2012-10-18 16 views
10

ho provato googling per questo problema, ma solo trovare il modo di farlo utilizzando due tabelle, come segue,MySQL INSERT diretta INTO con clausola WHERE

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.) 
     ) 

Questo ha funzionato per un piano d'azione, ma ora il mio interesse è quello di caricare dati direttamente dal programma stesso senza utilizzare due tabelle. Quello che voglio è caricare i dati che non sono nella tabella. Lo sql ho avuto nella mia testa era come il seguente,

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 != ''); 

Ma è sbagliato .. Posso sapere il modo corretto di farlo per favore, ringrazio molto :)

+1

In base all'SQL che avevi in ​​mente, sembra che tu voglia inserire una riga in una tabella se non esiste già. In tal caso, dare un'occhiata a questa domanda/risposta. http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql – qsheets

+0

vedi questa domanda. potrebbe essere d'aiuto http://stackoverflow.com/questions/2930378/mysql-replace-into-alternative – Dev

+0

yeaaa questo è stato il mio bisogno il check-in su questi ... grazie mille per le risposte :) –

risposta

14

INSERT sintassi non può avere WHERE clausola. L'unica volta che si trova INSERT ha la clausola WHERE quando si utilizza la dichiarazione INSERT INTO...SELECT.

La prima sintassi è già corretta.

+0

okey grazie, mal provate a ottimizzare il prima domanda per il mio bisogno :) –

+0

sì, quanto mi stupido solo bisogno di chiamare la stessa tabella nella query di selezione e abbinarla con i valori che volevo .. :) grazie mille :) –

+0

hehe, siete i benvenuti! –

-3

l'inserto nella Dichiarazione
l'inserto nella istruzione viene utilizzata per inserire una nuova riga in una tabella.
SQL INSERT INTO Sintassi

E 'possibile scrivere INSERT INTO in due forme.

La prima forma non specifica i nomi delle colonne in cui verranno inseriti i dati, solo i loro valori:

INSERT INTO table_name 
VALUES (value1, value2, value3,...) 

La seconda forma specifica sia i nomi di colonna ei valori da inserire:

INSERT INTO table_name (column1, column2, column3,...) 
VALUES (value1, value2, value3,...) 
+0

grazie per la risposta, ma volevo eseguire un'istruzione "INSERT INTO" condizionale :) –

1

Esempio di come eseguire INSERT INTO SELECT con una clausola WHERE.

INSERT INTO #test2 (id) SELECT id FROM #test1 WHERE id > 2 
+0

Modifica il tuo post e spiega la risposta. –

+0

Si spiega da solo. Questo è un esempio per dimostrare che puoi INSERIRE con una clausola WHERE. è un esempio davvero semplice in cui chiunque dovrebbe essere in grado di cogliere il concetto. – Pomster

+0

Il voto negativo non è mio, mi piace commentare invece. Come vedi, gli altri non sono d'accordo.Ho trovato il tuo post in post di bassa qualità, quindi ti suggerivo di migliorarlo. –

0

Se ho ben capito l'obiettivo è quello di inserire un nuovo record a un tavolo, ma se i dati sono già sul tavolo: saltare esso! Ecco la mia risposta:

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 

Il record da inserire è nei nuovi campi valore.