2010-07-27 1 views
5

volevo una soluzione per inserire un record se non è lì così ho cercato qui e abbiamo trovato una soluzione, ma ho un altro problemainserto se non esiste in SQL, duplicare nome della colonna

INSERT INTO closed_answers (question_id, subject_id) 
SELECT * FROM (SELECT 2, 2) AS tmp 
WHERE NOT EXISTS (
    SELECT question_id FROM closed_answers WHERE question_id = 2 AND subject_id = 2 
) LIMIT 1 

l'uscita è

#1060 - Duplicate column name '2' 

se ho usato ogni 2 numeri che non sono identici che funzionerà, ma il problema sorgere quando i 2 numeri sono gli stessi

risposta

13

il cambiamento più piccolo per rendere il vostro lavoro di SQL è quello di aggiungere alias per il tuo sele dichiarazione ct:

INSERT INTO closed_answers (question_id, subject_id) 
SELECT * FROM (SELECT 2 AS question_id, 2 AS subject_id) AS tmp 
WHERE NOT EXISTS (
    SELECT question_id 
    FROM closed_answers 
    WHERE question_id = 2 AND subject_id = 2 
) LIMIT 1 

Tuttavia, se si dispone di un vincolo univoco sulla (question_id, subject_id) quindi è possibile utilizzare INSERT IGNORE invece:

INSERT IGNORE INTO closed_answers (question_id, subject_id) 
VALUES (2, 2) 
+0

Questo mi ha aiutato molto qui: http://stackoverflow.com/questions/3164505/mysql-insert-record-if-not-exists-in-table/3164741#comment33044636_3164741 –

3
INSERT INTO closed_answers (question_id, subject_id) 
SELECT * FROM (SELECT 2 a, 2 b) AS tmp 
WHERE NOT EXISTS ( 
    SELECT 1 FROM closed_answers WHERE question_id = 2 AND subject_id = 2 
) LIMIT 1 

vostra dichiarazione prescelta con il subquery è strano un inutile, ma il problema era che non avevi il nome delle colonne selezionate. Quando si utilizza esiste, è sufficiente selezionare solo 1, piuttosto che un campo. Anche il limite 1 non era necessario.

+0

Si ha un errore nella sintassi SQL ; controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a 'WHERE NOT EXISTS ( SELECT 1 FROM closed_answers WHERE question_id = 2 AND subje' alla riga 3 –

+0

good call Mark .. Ho rimosso il secondo esempio, che – Fosco

+0

@MarkByers Nel mio caso, la tua risposta causa l'errore di sintassi, ma la risposta di Fosco non ha alcun errore. Sto usando MariaDB. –