Sql server 如何在SQL Server中从与映射表有联接的表中获取记录
如何从具有与映射表联接的表中获取记录 以下示例: 用户表格Sql server 如何在SQL Server中从与映射表有联接的表中获取记录,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,如何从具有与映射表联接的表中获取记录 以下示例: 用户表格 ID | Name ---+------- 1 | ABC 2 | xyz 3 | NYS ID | Name ---+------ 1 | F1 2 | F2 3 | F3 4 | F4 ID | UserID | FeatureID ----+---------+---------- 1 | 1 | 1 2 | 1 | 2 3 | 2 | 2 4
ID | Name
---+-------
1 | ABC
2 | xyz
3 | NYS
ID | Name
---+------
1 | F1
2 | F2
3 | F3
4 | F4
ID | UserID | FeatureID
----+---------+----------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 3 | 1
功能表
ID | Name
---+-------
1 | ABC
2 | xyz
3 | NYS
ID | Name
---+------
1 | F1
2 | F2
3 | F3
4 | F4
ID | UserID | FeatureID
----+---------+----------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 3 | 1
映射表
ID | Name
---+-------
1 | ABC
2 | xyz
3 | NYS
ID | Name
---+------
1 | F1
2 | F2
3 | F3
4 | F4
ID | UserID | FeatureID
----+---------+----------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 3 | 1
我需要这样的结果:
UserName | FeatureName | IsMap
---------+-------------+------------
ABC | F1 | True
ABC | F2 | True
ABC | F3 | False
ABC | F4 | False
XYZ | F1 | False
XYZ | F2 | True
XYZ | F3 | False
XYZ | F4 | False
NYS | F1 | True
NYS | F2 | False
NYS | F3 | False
NYS | F4 | False
请帮我解决这个问题。首先将
用户数据交叉连接到功能
数据以获得所有组合。然后,您可以将左键联接到映射表中,以检查映射是否存在。如果返回一个null
值,则没有匹配项,可以使用大小写
表达式来处理:
declare @User table(ID int,Name nvarchar(100));
insert into @User values (1,'ABC'),(2,'xyz'),(3,'NYS');
declare @Feature table(ID int,Name nvarchar(100));
insert into @Feature values (1,'F1'),(2,'F2'),(3,'F3'),(4,'F4');
declare @Mapping table(ID int,UserID int,FeatureID int);
insert into @Mapping values (1,1,1),(2,1,2),(3,2,2),(4,3,1);
select u.Name as UserName
,f.Name as FeatureName
,case when m.ID is not null then 'True' else 'False' end as IsMap
from @User u
cross join @Feature f
left join @Mapping m
on(u.ID = m.UserID
and f.ID = m.FeatureID
)
order by u.Name
,f.Name;
输出:
+----------+-------------+-------+
| UserName | FeatureName | IsMap |
+----------+-------------+-------+
| ABC | F1 | True |
| ABC | F2 | True |
| ABC | F3 | False |
| ABC | F4 | False |
| NYS | F1 | True |
| NYS | F2 | False |
| NYS | F3 | False |
| NYS | F4 | False |
| xyz | F1 | False |
| xyz | F2 | True |
| xyz | F3 | False |
| xyz | F4 | False |
+----------+-------------+-------+
到目前为止你试过什么?这是非常简单的SQL。