DELETE FROM staff
WHERE staff_id NOT IN (SELECT MIN(staff_id) FROM staff GROUP BY store_id);
有一个错误:
[23503]错误:更新或删除表“staff”违反外键 表“付款”上的约束“payment_staff_id_fkey”详细信息:密钥 (staff_id)=(3)仍然从表“付款”中引用。
确实,付款有FK约束:
CREATE TABLE public.payment
(
payment_id integer NOT NULL DEFAULT nextval('payment_payment_id_seq'::regclass),
customer_id integer NOT NULL,
staff_id smallint NOT NULL,
rental_id integer NOT NULL,
amount numeric(5,2) NOT NULL,
payment_date timestamp without time zone NOT NULL,
CONSTRAINT payment_pkey PRIMARY KEY (payment_id),
CONSTRAINT payment_customer_id_fkey FOREIGN KEY (customer_id)
REFERENCES public.customer (customer_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT payment_rental_id_fkey FOREIGN KEY (rental_id)
REFERENCES public.rental (rental_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET NULL,
CONSTRAINT payment_staff_id_fkey FOREIGN KEY (staff_id)
REFERENCES public.staff (staff_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
由于payment.staff_id = null
为suggested here,因此无法设置NOT NULL
。
解决这个问题的最简单方法是什么?
答案 0 :(得分:3)
看起来它是数据模型的问题,而不是数据库。
此时约束严格禁止您执行此类删除。看起来有一个严格的规则" 每个付款都必须与使用它的工作人员联系,付款信息应保留在db "中。因此,如果需要删除工作人员记录,则必须更改该规则。以下是一些选项:
无论如何,它首先是业务逻辑问题,而不是技术问题。
编辑:问题已被更改或我错过了注释"当尝试删除重复项时#34;。如果是这样,你只需要更新与stuff成员链接的实体,在删除之前将它们取消引用它们而不是重复。