在select语句(MSSQL 2012)中,我想将一个表中的列值添加到另一个表中。
我想将第一个表中的文本 Manager 添加到第二个已联接表的角色中,其中包括Manager列的名称。
因此,在“成员”列中将有另外两行(角色ID为1和DeptID 2),角色名称为“经理”,“用户A”和“用户B”。
就像角色名称应始终为“经理”一样,SubTeamName也应始终为“核心”。
样本数据:
CREATE TABLE Base
(DeptID int, [Manager] varchar(13))
;
INSERT INTO Base
(DeptID,[Manager])
VALUES
(1,'User A'),
(2,'User B'),
(3,'User C')
;
CREATE TABLE TeamMember
(ID int,DeptID int,RoleID int, [Member] varchar(57) )
;
INSERT INTO TeamMember
([ID],DeptID, RoleID, Member)
VALUES
(44, 1,2, 'User D'),
(55, 2,3, 'User E')
;
CREATE TABLE SubTeam
(ID int, [SubTeamName] varchar(57) )
;
INSERT INTO SubTeam
([ID],[SubTeamName])
VALUES
(44, 'Core'),
(55, 'Extended')
;
CREATE TABLE Role
(ID int, SubID int, [Role] varchar(57))
;
INSERT INTO Role
(ID, SubID, [Role])
VALUES
(1,44, 'Sales'),
(2,44, 'Finance'),
(3,55, 'Development')
;
当前查询是:
SELECT b.DeptID, t.RoleID, r.Role, t.Member, s.SubTeamName
FROM SubTeam s
LEFT JOIN Role r ON s.ID = r.SubID
LEFT JOIN TeamMember t ON r.ID = t.RoleID
LEFT JOIN Base b ON t.DeptID = b.DeptID
WHERE b.DeptID is not Null
也请参阅此Fiddle
在尝试使用Union语句时,也许我觉得太复杂了,但我相信有一种更简单的方法,希望您可以向我展示。
答案 0 :(得分:1)
工会可能是最简单的解决方案。我注意到您当前的查询有点麻烦-您使用的是左联接,但是使用where子句中的条件有效地将它们更改为内部联接。另外,您正在加入 private ObservableCollection<User> _usersCollectionDB = new ObservableCollection<User>();
public ObservableCollection<User> UsersCollection
{
get
{
if (_usersCollectionDB.Count == 0)
{
var allUsers = LiteDbHelper.GetAllUsers();
_usersCollectionDB.AddRange(allUsers);
return _usersCollectionDB;
}
return _usersCollectionDB;
}
set => _usersCollectionDB = value;
}
表,但没有在有意义的地方使用它-因此,我对查询做了一些小的更改。
这是我想出的:
var allUsers = LiteDbHelper.GetAllUsers();
_usersCollectionDB.Clear();
_usersCollectionDB.AddRange(allUsers);
_usersCollection.View.Refresh();