2010-05-09 8 views
0

Может ли кто-нибудь помочь мне с синтаксисом?Вставить в таблицу, если нет в списке

insert into history (company,partnumber,price) 
values ('blah','IFS0090','0.00') 
if company NOT IN ('blah','blah2','blah3','blah4','blah4') 
and partnumber='IFS0090'; 

фона:
У меня есть таблица истории, которая хранит ежедневные компании, товары и цены. Но иногда компания удаляется сама на несколько дней. Усложнение проблемы заключается в том, что я сохраняю только ежедневные ИЗМЕНЕНИЯ только по ценам, а не снижаю весь список дней (данные будут огромными), когда я покажу данные, которые компания по-прежнему будет получать за предыдущую цену. Поэтому мне нужно сделать что-то вроде этого, где цена 0.00 означает, что их больше нет.

ответ

1

Использование:

INSERT INTO HISTORY 
    (company, partnumber, price) 
SELECT 'blah', 'IFS0090','0.00' 
    FROM HISTORY h 
    WHERE h.company NOT IN ('blah','blah2','blah3','blah4','blah4') 
    AND h.partnumber = 'IFS0090' 
0

Вы смешиваете два совершенно разных понятия в своем заявлении. Выберите один:

  • Либо вы хотите вставить постоянные значения (в этом случае делают чеки на вашем языке программирования и генерации INSERT INTO ... VALUES (...) соответственно)
  • или вставить отфильтрованное содержимое другой таблицы.

Последнее возможно в MySQL (это INSERT ... SELECT syntax), запрос будет выглядеть следующим образом:

INSERT INTO history (...) 
SELECT ... 
FROM liveTable 
INNER JOIN moreTables ... 
--# this is a regular SELECT statement, as you might have guessed by now 
WHERE company NOT IN ('blah','blah2','blah3','blah4','blah4') 
AND partnumber='IFS0090';