sql - 在多个查询中使用一个结果集

标签 sql sql-server

我想为一个相当大的基础创建一个小备份(这样开发人员可以下载 ~1-2gb 而不是 15gb)。

为了做到这一点,我复制了基础并运行了一些截断一些表(日志等)的脚本,我想删除一些用户(总是相同的用户)以外的数据。

现在我有这个:

-- delete order details not in test accounts
DELETE FROM order_details WHERE Album_ID NOT IN (
    SELECT Album_ID FROM albums WHERE User_ID IN (
        SELECT User_ID FROM users
            WHERE Email_ID LIKE '%@xxx.com'
            OR Email_ID LIKE '%@yyy.com'
            OR Email_ID LIKE '%@zzz.com'
    )
)
DELETE FROM orders WHERE User_ID NOT IN (
    SELECT User_ID FROM users
        WHERE Email_ID LIKE '%@xxx.com'
        OR Email_ID LIKE '%@yyy.com'
        OR Email_ID LIKE '%@zzz.com'
)

-- delete albums not in test accounts
DELETE FROM albums WHERE User_ID NOT IN (
    SELECT User_ID FROM users
        WHERE Email_ID LIKE '%@xxx.com'
        OR Email_ID LIKE '%@yyy.com'
        OR Email_ID LIKE '%@zzz.com'
)
-- snip a few more of the same

如您所见,我总是使用相同的 SELECT User_ID FROM users WHERE Email_ID LIKE '%@xxx.com' OR Email_ID LIKE '%@yyy.com' OR... 子-多处查询。

你会怎么做才能避免重复自己?

谢谢!

最佳答案

尝试将值插入临时变量并在所有 where 条件下使用相同的值。

DECLARE @table as TABLE(User_ID  Nvarchar(50))

INSERT INTO @table (User_ID)
SELECT User_ID FROM users
        WHERE Email_ID LIKE '%@xxx.com'
        OR Email_ID LIKE '%@yyy.com'
        OR Email_ID LIKE '%@zzz.com'

DELETE FROM order_details WHERE Album_ID NOT IN (
    SELECT Album_ID FROM albums WHERE User_ID IN (
        SELECT User_ID FROM @table))

关于sql - 在多个查询中使用一个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15764091/

相关文章:

sql-server - 如何在 SQL Azure Active Geo-Replication secondary 上重新创建用户/登录名

sql-server - SSRS 超时已过期。操作完成前超时时间已过或服务器未响应

sql-server - 隔离存储异常: Unable to determine the identity of domain

sql - 如何同时IN和NOT IN

sql - 复合主键/聚集索引、碎片、性能

sql - 在 SQL 中混合使用 Like 和 Not Like

php - MySQL 错误代码 1005,SQL 状态 HY000 : Can't create table 'cpis.cpis_sudent_profile' (errno: 150)

php - 从多个表中按计数排序的最佳方法是什么?

php - 将每个文本文件的内容保存到数据库表 mysql 中

sql - 使 MS SQL Server 中的表仅可用于插入?