我正在努力解决如何完成此Delete查询。我的目标是基于是否没有保险单(另一个表)以及他们的需求描述为“运输”并且重要性值为LESS而不是5来删除客户记录(主表)。需求是另一张桌子。它们都通过外键和SSN连接,并且连接器和Delete级联工作正常。该查询部分按原样工作。如果没有保险单,则将客户端正确删除。但是,需求描述和重要性值因子当前不起作用。如果我没有保险单,它仍然会删除,但是我的重要性描述是运输以外的另一个值。
几乎就像我需要2个子查询来比较Needs表和Insurance_Policy表以进行删除,但是我不知道该怎么做。
我正在使用的数据库是Azure Data Studio
这是我当前的过程代码:
DROP PROCEDURE IF EXISTS Option17;
GO
CREATE PROCEDURE Option17
AS
BEGIN
DELETE FROM Client
WHERE Client.SSN NOT IN (SELECT I.SSN
FROM Insurance_Policy I, Needs N
WHERE Client.SSN = I.SSN
AND Client.SSN = N.SSN
AND N.need_description = 'transportation'
AND N.importance_value < 5)
END
另外,这是我的表结构:
CREATE TABLE Client
(
SSN VARCHAR(9),
doctor_name VARCHAR(60),
doctor_phone_no VARCHAR(10),
lawyer_name VARCHAR(60),
lawyer_phone_no VARCHAR(10),
date_assigned DATE,
PRIMARY KEY (SSN),
FOREIGN KEY (SSN) REFERENCES Person
ON DELETE CASCADE
);
CREATE TABLE Insurance_Policy
(
policy_id VARCHAR(10),
provider_id VARCHAR(10),
provider_address VARCHAR(100),
insurance_type VARCHAR(10),
SSN VARCHAR(9),
PRIMARY KEY (policy_id),
FOREIGN KEY (SSN) REFERENCES Client,
);
CREATE TABLE Needs
(
SSN VARCHAR(9),
need_description VARCHAR(60),
importance_value INT CHECK(importance_value > 0 and importance_value <11),
PRIMARY KEY(SSN,need_description),
FOREIGN KEY(SSN) REFERENCES Client
ON DELETE CASCADE
);
这是屏幕截图,如果格式化没有阻止过程。
根据您的答案,我相信这是您正在寻找的代码。如果这不起作用,请告诉我。
稍微说明一下,使用INNER联接将消除对几个WHERE条件的需求。INNER JOIN仅返回两个表中都存在的记录。同样,也不需要从子查询中链接到Client表。
另外,您还希望其中的运输说明的重要性不低于5。由于要拉出一个单独列出的清单,因此您不希望包含这些记录。
DROP PROC IF EXISTS Option17;
GO
Create proc Option17
AS
BEGIN
DELETE FROM Client
WHERE SSN NOT IN (
SELECT
N.SSN
FROM Needs N
INNER JOIN Insurance_Policy I ON N.SSN = I.SSN
WHERE NOT (N.need_description = 'transportation' AND N.importance_value < 5)
);
END
GO
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句