TSQL-从一个表到另一个表中选择列值

时间:2018-10-04 12:49:53

标签: sql-server tsql select sql-server-2012

在select语句(MSSQL 2012)中,我想将一个表中的列值添加到另一个表中。

最好用这张图片来解释: enter image description here

我想将第一个表中的文本 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语句时,也许我觉得太复杂了,但我相信有一种更简单的方法,希望您可以向我展示。

1 个答案:

答案 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();

See fiddle demo.