gpt4 book ai didi

mysql - 有没有办法把这两个sql删除操作的逻辑结合起来呢?

转载 作者:行者123 更新时间:2023-11-29 16:09:28 25 4
gpt4 key购买 nike

我正在用 SQL 编写两个 DELETE 操作。第一个删除数据库中设置了学生角色名称的条目。第二个删除名称为 null 的条目。我想知道是否可以使用一个 SQL 命令来处理这两种逻辑,或者我是否需要将它们分开?

我有 4 个表 StudentClassStudent_RoleSignup。下面的删除将删除用户提供学生唯一 ID、类(class)唯一 ID 以及学生角色名称的条目。

注册有 3 列(CLASS_ID、STUDENT_ID、STUDENT_ROLE_ID),它们都是外键

1st DELETE command:

DELETE S FROM SIGNUP S
INNER JOIN CLASS ON CLASS.ID = S.CLASS_ID
INNER JOIN STUDENT ON STUDENT.ID = S.STUDENT_ID
INNER JOIN STUDENT_ROLE ON STUDENT_ROLE.ID = SDR.STUDENT_ROLE_ID
WHERE CLASS.UNIQUE_ID = :classUniqueId AND
STUDENT.UNIQUE_ID = :studentUniqueId AND STUDENT_ROLE.NAME = :roleName

但是如果我为 roleName 传递 null,那么这个查询将不起作用。基本上,我的第二个用例是我想删除一条记录,其中学生唯一 ID 和类(class)唯一 ID 与用户提供的内容匹配,但角色名称不存在。在本例中,它为 null。因此,对于这种情况,我还有另一个 DELETE 语句:

2nd DELETE command:

DELETE S FROM SIGNUP S
INNER JOIN CLASS ON CLASS.ID = S.CLASS_ID
INNER JOIN STUDENT ON STUDENT.ID = S.STUDENT_ID
WHERE CLASS.UNIQUE_ID = :classUniqueId AND STUDENT.UNIQUE_ID = :studentUniqueId
AND S.STUDENT_ROLE_ID IS NULL

现在我想知道是否可以将这两个组合成一个语句来处理任一条件(用户提供特定的学生角色 ID,或角色 ID 为 null)最后,只有一个条目应被删除。有什么办法可以实现这一点吗?

最佳答案

不确定我是否理解你的意思,但这也许就是你想要的

DELETE S 
FROM signup S
INNER JOIN class
ON class.id = S.class_id
INNER JOIN student
ON student.id = S.student_id
LEFT JOIN student_role
ON student_role.id = S.student_role_id
WHERE class.unique_id = :classUniqueId
AND student.unique_id = :studentUniqueId
AND ( ( :roleName IS NULL
AND S.student_role_id IS NULL )
OR ( :roleName IS NOT NULL
AND student_role.NAME = :roleName ) )

将 STUDENT_ROLE 从 INNER JOIN 更改为 LEFT JOIN,并在 where 子句中“忽略”STUDENT_ROLE.NAME 检查 :roleName 是否为 NULL。

关于mysql - 有没有办法把这两个sql删除操作的逻辑结合起来呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55399241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com