尝试使用 SQL 从多个表中删除 [英] Trying to delete from multiple tables using SQL

查看:31
本文介绍了尝试使用 SQL 从多个表中删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序中有 4 个表:

I have 4 tables in our application:

  • 用户
  • 使用
  • upklist
  • 项目共享

最后三个表包含一个名为 session_id 的字段.

The last three tables contain a field called session_id.

在下面的代码中,括号中的部分用于从用户awpeople"的 usession 表中获取所有 session_id 值.

In the code below, the section in parenthesis works to get all session_id values from usession table for user "awpeople".

问题是我如何将这个结果集读入一个数组,并从 session_id 在数组结果中的所有三个表中删除.

The problem is how do I read this result set into an array and delete from all three tables where session_id is in the array results.

代码:

DELETE FROM usession, 
            upklist, 
            projshar 
WHERE  session_id = (SELECT session_id 
                     FROM   usession 
                     WHERE  delete_session_id IS NULL 
                            AND user_id = (SELECT user_id 
                                           FROM   users 
                                           WHERE  REGEXP_LIKE(USER_NAME, 
                                                  'awpeople', 'i'))); 

推荐答案

delete 一次只能处理一张表,所以你需要三个语句:

delete can only handle one table at a time, so you'd need three statements:

DELETE FROM upklist 
WHERE  session_id = (SELECT session_id 
                     FROM   usession 
                     WHERE  delete_session_id IS NULL 
                            AND user_id = (SELECT user_id 
                                           FROM   users 
                                           WHERE  REGEXP_LIKE(USER_NAME, 
                                                  'awpeople', 'i'))); 

DELETE FROM projshar 
WHERE  session_id = (SELECT session_id 
                     FROM   usession 
                     WHERE  delete_session_id IS NULL 
                            AND user_id = (SELECT user_id 
                                           FROM   users 
                                           WHERE  REGEXP_LIKE(USER_NAME, 
                                                  'awpeople', 'i'))); 

DELETE FROM usession 
WHERE  session_id = (SELECT session_id 
                     FROM   usession 
                     WHERE  delete_session_id IS NULL 
                            AND user_id = (SELECT user_id 
                                           FROM   users 
                                           WHERE  REGEXP_LIKE(USER_NAME, 
                                                  'awpeople', 'i'))); 

请注意,由于内部查询依赖于 usersession,您应该从它last 中删除.

Note that since the inner query relies on usersession, you should delete from it last.

这篇关于尝试使用 SQL 从多个表中删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆