尝试使用 SQL 从多个表中删除

use*_*630 4 sql oracle sql-delete

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

  • 用户
  • 用途
  • 上行列表
  • 项目共享

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

在下面的代码中,括号中的部分用于session_idusession用户“awpeople”的表中获取所有值。

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

代码:

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'))); 
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 5

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

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'))); 
Run Code Online (Sandbox Code Playgroud)

请注意,由于内部查询依赖于usersession,您应该最后从中删除。

  • @diadyne 该页面是 Oracle MySQL 文档的一部分。OP询问的Oracle数据库的[`delete`](http://docs.oracle.com/database/121/SQLRF/statements_8005.htm#SQLRF01505)不支持多表表达式。 (2认同)