2010-05-09 44 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';