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

标签 mysql sql

我正在用 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/

相关文章:

java - Java异步执行MySQL查询语句的简单方法

php - Mysql查询找不到第一个词

java - 我应该制作 Linux Shell Script 还是 Java 程序?

java - Spring JpaRepository getOne() 用于 PK 为字符串的表

PHP SQL - 更新搜索结果的数据

mysql - SQL错误代码: 1364 Field 'CustomerNumber' doesn't have a default value

php - 未在数据库中发布的值

c# - sql异步查询问题

javascript - 将表字段名从 php 保存到 excel

java - 具有显式自定义类的 getNamedQuery