基于多个表选择SQL删除记录

佩顿

我正在努力解决如何完成此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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从SQL表中删除多个记录

来自分类Dev

SQL删除按多个表分组的记录

来自分类Dev

从SQL Server的多个表中删除许多记录的最佳实践

来自分类Dev

从SQL Server的多个表中删除许多记录的最佳实践

来自分类Dev

SQL:基于多个记录创建新记录

来自分类Dev

SQL选择多个表

来自分类Dev

如何从休眠表中选择多个记录

来自分类Dev

从多个表中选择最新记录

来自分类Dev

从多个联接表中选择最新记录

来自分类Dev

如何从休眠表中选择多个记录

来自分类Dev

从多个Access表中删除记录

来自分类Dev

SQL:选择多个记录时如何只选择最新记录

来自分类Dev

SQL:选择多个表的计数

来自分类Dev

SQL:基于两个字段从表A中删除表B中不存在的记录

来自分类Dev

SQL:基于两个字段从表A中删除表B中不存在的记录

来自分类Dev

从SQL表中删除重复的行(基于多个列中的值)

来自分类Dev

将SQL查询转换为活动记录以从多个表中进行选择

来自分类Dev

如何使用MySQL基于多个记录选择多列?

来自分类Dev

MongoDB-基于多个字段选择不同的记录

来自分类Dev

如何使用MySQL基于多个记录选择多列?

来自分类Dev

使用SQL存储过程从不同的表中删除多个记录

来自分类Dev

删除从同一表的选择查询中选择的记录

来自分类Dev

删除从同一表的选择查询中选择的记录

来自分类Dev

从SQL绑定的Datagrid删除多个记录

来自分类Dev

SQL从表中选择不同的记录

来自分类Dev

如何从 SQL 表中选择部分记录

来自分类Dev

选择表中出现最多的记录SQL

来自分类Dev

Excel-基于多个列匹配工作表之间的记录

来自分类Dev

SQL选择行并从动态多个表中删除/更新

Related 相关文章

热门标签

归档