插入表格,如果不在列表中

时间:2010-05-09 18:05:03

标签: sql mysql

有人可以帮我解释语法吗?

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的价格意味着它们不再存在。

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

您在语句中混合了两个完全不同的概念。选择一个:

  • 您想要INSERT常量值(在这种情况下,使用您的编程语言进行检查并相应地生成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';