我似乎無法追查爲什麼MySQL試圖更新表中的列時拋出一個錯誤給定以下內容。觸發導致MySQL錯誤1054未知列
更新查詢:
update jobitems set itemprice=itemprice/100;
的錯誤是:
Error Code: 1054. Unknown column 'JobID' in 'where clause'
當我刪除從jobitems觸發器以下,更新工作。
DELIMITER $$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `alacarte`.`jobitems_beforeupdate`
BEFORE UPDATE ON `alacarte`.`jobitems`
FOR EACH ROW
Begin
declare customer varchar(45);
Set @customer = (select CustomerID FROM jobs WHERE JobID=old.JobID);
If new.ItemCompleted<=>1
AND (select InvoiceStatus
FROM
(Select InvoiceStatus, CustomerID
FROM invoices
as custinvoices
Where [email protected])
as InvoiceStatus
WHERE InvoiceStatus='Open') IS NULL
then
insert into invoices
set
[email protected],
InvoiceBillToName=ifnull((select CustomerName FROM customers WHERE [email protected]),'-'),
InvoiceBillToAddress=etc;
當然,作業表有一個JobID和CustomerID列。其他許多觸發器和我們的前端都利用這些色譜柱,並且工作完美無瑕。
以下查詢工作並返回正確的「cust-000002」。
Set @customer = (select CustomerID FROM jobs WHERE JobID='ALC-20121119-001');
select @customer;
而且下面的查詢工作(ItemCompleted = 0這個jobitem,所以它不觸發上述觸發):
update jobitems set itemprice=itemprice/100 where JobID='ALC-20121119-001';
所以,我正式堅持了上述信息。請幫忙 :)。
更新:
消除變量,並取代「@customer」(選擇客戶ID喬布斯WHERE作業ID = old.JobID)在整個觸發給出了同樣的錯誤,這是意料中。
此外,通過修改觸發器,錯誤消失。我以一種新的方式使用了變量,並且它可以工作。以下內容將每個作業的@customer輸出添加到測試列中,並且完美地工作。呃!
declare customer varchar(45);
Set @customer = (select CustomerID FROM jobs WHERE JobID=old.JobID);
If new.ItemCompleted<=>1
then
update jobs set [email protected] where JobID=old.JobID;
end if;
更新:
只是爲了確保我不是瘋了,我複製並粘貼觸發回來,我得到確切同樣的錯誤消息之前,所以這個問題是可再現的。另外,爲了徹底,「ItemCompleted = 1」的條目無法更新,但沒有錯誤,條目「ItemCompleted = 0」可以更新而沒有錯誤通過試圖通過我們的前端編輯條目逐一。我想我只是確定,因爲我現在徹底困惑。
我最終追查到了另一個未被完全修改的觸發器,我在閱讀這篇文章之前就已經解決了,所以我無法看到日誌會說什麼,儘管我假設日誌會指向正確的方向,所以我真的覺得你提供了正確的答案。感謝您給我日誌工具以供將來調試。我正在尋找一個日誌打開,沒有找到正確的一個之前,跟蹤問題!我現在打開了日誌,可能會在不久的將來使用它。謝謝! – Damon