首页 > 解决方案 > 查找缺失的设置

问题描述

我的数据库中有两个表。表 A 是信息数据表,表 B 是设置表。如何找到表 A 缺少表 B 中的设置之一。

例如

Table A
username       setting
Mark           1
Mark           2
Martin         2
Jane           1

Table B
Possible_Setting
1             
2             
3

Result Table
username      missing_setting
Mark          3
Martin        1
Martin        3
Jane          2
Jane          3

感谢帮助!

标签: sql-server-2012

解决方案


如果表大小很大,由于交叉连接,这可能效率低下,但这是我能想出的唯一答案。

    SELECT a.username, b.Possible_Setting AS missing_setting 
FROM 
    (SELECT DISTINCT username FROM TableA a) a 
    CROSS JOIN TableB b 
WHERE 
    NOT EXISTS (
        SELECT * 
        FROM TableA real_a 
        WHERE   real_a.username = a.username 
            AND real_a.setting = b.Possible_Setting)
ORDER BY 1, 2

设置代码:

CREATE TABLE TableA (username varchar(20), setting tinyint)
CREATE TABLE TableB (Possible_Setting tinyint PRIMARY KEY)

INSERT TableA VALUES 
('Mark',          1),
('Mark',          2),
('Martin',        2),
('Jane',           1)

INSERT TableB VALUES 
(1),
(2),
(3)

推荐阅读