我有6張桌子:在SQL中創建查詢需要一些幫助?
Staff (StaffID, Name)
Product (ProductID, Name)
Faq (FaqID, Question, Answer, ProductID*)
Customer (CustomerID, Name, Email)
Ticket (TicketID, Problem, Status, Priority, LoggedTime, CustomerID* , ProductID*)
TicketUpdate (TicketUpdateID, Message, UpdateTime, TicketID* , StaffID*)
要回答的問題: 給定的產品ID,刪除的記錄該產品。當產品被移除時,所有相關的常見問題解答可以保留在數據庫中,但ProductID字段中應該有一個空引用。但是,產品的刪除也應該刪除任何關聯的故障單及其更新。爲了完整性,已刪除的故障單及其更新應複製到審計表或一組表中,以維護產品,其故障單和更新的歷史數據。 (提示:您需要定義一個或多個表來維護此審覈信息,並在產品被刪除時自動複製任何已刪除的故障單和故障單更新)。您的審覈表應記錄請求刪除的用戶和刪除操作的時間戳。
我已經創造了額外的maintain_audit表:
CREATE TABLE maintain_audit(
TicketID INTEGER NOT NULL,
TicketUpdateID INTEGER NOT NULL,
Message VARCHAR(1000),
mdate TIMESTAMP NOT NULL,
muser VARCHAR(128),
PRIMARY KEY (TicketID, TicketUpdateID)
);
Addittionally我已創建1個功能和觸發:
CREATE OR REPLACE FUNCTION maintain_audit()
RETURNS TRIGGER AS $BODY$
BEGIN
INSERT INTO maintain_audit (TicketID,TicketUpdateID,Message,muser,mdate)
(SELECT Ticket.ID,TicketUpdate.ID,Message,user,now() FROM Ticket, TicketUpdate WHERE Ticket.ID=TicketUpdate.TicketID AND Ticket.ProductID = OLD.ID);
RETURN OLD;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER maintain_audit
BEFORE DELETE
ON Product
FOR EACH ROW
EXECUTE PROCEDURE maintain_audit()
DELETE FROM Product WHERE Product.ID=30;
當我運行此我得到這樣的:
ERROR: null value in column "productid" violates not-null constraint
CONTEXT: SQL statement "UPDATE ONLY "public"."faq" SET "productid" = NULL WHERE $1 OPERATOR(pg_catalog.=) "productid""
GUYS,你能幫我解決這個問題嗎?
感謝賈斯汀!;-)這是非常有幫助! – BlackOctober 2012-04-18 23:05:00