2010-07-27 10 views
5
ben burada aradı ve bir çözüm buldum bu yüzden yoksa bir kayıt eklemek için bir çözüm istedi ama başka bir sorun

insert rekor değilse sütun adı çoğaltmak, sql var

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 

çıkışı var

#1060 - Duplicate column name '2' 

i işe yarayacak ama 2 numaralar SQL çalışması için aynı

cevap

13

en küçük bir değişiklik olduğunda sorun ortaya özdeş olmayan herhangi 2 numara kullanılması halinde adlar eklemektir olduğunu senin sele ct deyimi: Eğer (question_id, subject_id) üzerinde benzersiz bir kısıtlama varsa

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 

Ancak o zaman bunun yerine INSERT IGNORE kullanabilirsiniz:

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

Bu bana burada çok yardımcı oldu: 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 

alt sorgu ile olan select ifadesi gereksiz bir ama problem garip Seçtiğiniz sütunları isimlendirmediniz. Varsa, bir alan yerine sadece 1 seçmek yeterlidir. Ayrıca sınır 1 gerekli değildi.

+0

SQL sözdiziminizde bir hata var ; 'WHERE EXISTS ( SELECT 1 FROM closed_answers WHERE question_id = 2 AND subje' satır 3 –

+0

iyi çağrı Mark yakınında kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin. beynim oldukça aptalca öldü – Fosco

+0

@MarkByers Benim durumumda, cevabınız sözdizimi hatasına yol açıyor.Fakat'ın cevabının bir hatası yok MariaDB kullanıyorum. –