SQL数组生成临时表

12/15/2020 SQL

# SQL数组生成临时表

考虑如下场景:安全部门用Excel的方式给出了一个Email名单,需要筛选这个名单中最近没有登录过系统的列表,当前报表数据库中有一张表,存储Email登录记录

思路:将Excel的Email导出为临时表,用临时表与登录记录表进行关联查询,数据量不大的情况,考虑直接在SELECT语句中生成临时表:

# 语法

SELECT * 
    FROM (
        VALUES 
            (1),
            (2),
            。。。
    ) 表名(列名)
1
2
3
4
5
6
7

示例

SELECT *
  FROM (
      VALUES
      ('a@cc.com'),
      ('b@cc.com'),
      ('c@bb.com')
    )  import_table(email)
1
2
3
4
5
6
7

# 实例

查询给定Email列表中不在登陆记录表的部分

SELECT distinct(import_table.email)
  FROM (
      VALUES
      ('a@cc.com'),
      ('b@cc.com'),
      ('c@bb.com')
    )  import_table(email) 
    LEFT JOIN login_record ON import_table.email = login_record.email
    WHERE login_record.email is null
1
2
3
4
5
6
7
8
9
Last Updated: 1/22/2024, 8:56:53 AM