【发布时间】:2016-10-11 20:17:04
【问题描述】:
我花了几个小时试图找出这个特定的连接。我有这三个 SQL Server 表(假设所有必需的索引和外键):
create table [mykey] (keyname varchar(32) not null);
go
create table [myinstance] (
instancename varchar(48) not null);
go
create table [mypermissions] (
keyname varchar(32),
instancename varchar(48),
permission int not null);
go
insert into [mykey] (keyname) values ('test_key_1'), ('test_key_2'), ('test_key_3');
GO
insert into [myinstance] (instancename) values ('sqlexpress'), ('std2008'), ('ent2012');
GO
insert into mypermissions (keyname, instancename, permission) values
('test_key_1', 'sqlexpress', 1),
('test_key_1', 'std2008', 0),
('test_key_2', 'ent2012', 1),
('test_key_2', 'sqlexpress', 0)
GO
我正在尝试创建一个显示所有键名权限的连接,同时还显示缺少特定权限的位置。我希望输出看起来像这样(顺序不重要):
keyname instancename permission
---------- ------------ ----------
test_key_1 sqlexpress 1
test_key_1 std2008 0
test_key_1 ent2012 NULL
test_key_2 ent2012 1
test_key_2 sqlexpress 0
test_key_2 std2008 NULL
test_key_3 sqlexpress NULL
test_key_3 std2008 NULL
test_key_3 ent2012 NULL
但它看起来像这样:
keyname instancename permission
---------- ------------ ----------
test_key_1 sqlexpress 1
test_key_1 std2008 0
test_key_2 ent2012 1
test_key_2 sqlexpress 0
test_key_3 NULL NULL
我花了几个小时进行各种连接,但没有运气。也许我想做的事情是不可能的。这是我最近尝试的一个:
select k.keyname, p.instancename, p.permission from mykey k
full join mypermissions p on (k.keyname = p.keyname)
full join myinstance i on p.instancename = i.instancename
我正在尝试做的事情可能吗?
【问题讨论】:
标签: sql sql-server join