insert into table where if not in list
Can anybody help me with the syntax?
insert into history (company,partnumber,price)
values ('blah','IFS0090','0.00')
if company NOT IN ('blah','blah2','blah3','blah4','blah4')
and partnumber='IFS0090';
Background:
I have a history table which stores daily company, products and prices. But sometimes a compan开发者_Go百科y will remove itself for a few days. Complicating the issue is because I'm only saving daily CHANGES to prices only and not snapshotting the entire days list (the data would be huge) when I display the data the company will still come up for the previous days price. So I need to do something like this, where a 0.00 price means they're no longer there.Use:
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'
You are mixing two completely different concepts in your statement. Choose one:
- Either you want to INSERT constant values (in that case make your checks in your programming language and generate the
INSERT INTO ... VALUES (...)
accordingly) - or insert the filtered contents of another table.
The latter is possible in MySQL (that's the INSERT ... SELECT
syntax), the query would look like this:
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';
精彩评论