2016-11-05 2 views
0

Вот мой запрос:Вставить запись, если не существует в таблице неудачи в MySQL

INSERT INTO table (id, actions, date, comments, type, url, rating) 
    SELECT * FROM (SELECT 'b7d54d99bf11', 'Information Exchanged', '1430463600', '', 'routine', 'http://example.com', '') AS tmp 
    WHERE NOT EXISTS (SELECT url FROM table WHERE url = 'http://example.com') 

Я получаю ошибку SQL, который говорит Duplicate column name: '', потому что нет rating или comments прошли в течение нескольких записей.

Как я могу избежать ошибки? Есть ли лучший способ достичь этого?

ответ

0

Вы должны включить псевдоним для столбцов

INSERT INTO table (id, actions, date, comments, type, url, rating) 
    SELECT * FROM (SELECT 'b7d54d99bf11' as id, 
         'Information Exchanged' as actions, 
         '1430463600' as date, 
         '' as comments, 
         'routine' as type, 
         'http://example.com' as url, 
         '' as rating) AS tmp 
0

Вам не нужно подзапрос, осложненный вообще:

INSERT INTO table (id, actions, date, comments, type, url, rating) 
    SELECT 'b7d54d99bf11', 'Information Exchanged', '1430463600', '', 'routine', 'http://example.com', '' 
    FROM (SELECT 1 as x) t 
    WHERE NOT EXISTS (SELECT url FROM table WHERE url = 'http://example.com'); 

Однако, лучший метод должен позволять базу данных сделайте чек. Создание уникального ограничения/индекса, а затем фраза insert игнорировать обновления, когда есть дубликаты:

alter table t add constraint unq_table_url unique(url); 

insert into table (id, actions, date, comments, type, url, rating) 
    select 'b7d54d99bf11', 'Information Exchanged', '1430463600', '', 'routine', 'http://example.com', '' 
    on duplicate key update url = values(url); 

Это имеет то преимущество, что база данных будут обеспечивать уникальность для всех вставок и обновлений - и код, который делает то изменения базы данных не нужно проверять каждый раз.

Смежные вопросы