mysql - 编写查询以获得所需的 SQL 表输出

标签 mysql sql sql-server

我有一些表,并使用 sql 查询在下表中找到所需的输出。表是:

EmpID   TabId
101   1
102   2
103   3
104   4
105   1

其中表名称为Master

EmpID   Name
101   A1
102   A2
103   A3
104   A4
105   A5

表名称为TableA

EmpID   Name
101   B1
102   B2
103   B3
104   B4
105   B5

表名称为TableB

EmpID   Name
101   C1
102   C2
103   C3
104   C4
105   C5

表名称为TableC

EmpID   Name
101   D1
102   D2
103   D3
104   D4
105   D5

表名称为TableD

TabId   Name
1     TableA
2     TableB
3     TableC
4     TableD

表名称为 AttMaster 已提供给我们,所需的输出如下

TabId   Name
101     A1
102     B2
103     C3
104     D4
105     A5

请帮助我如何通过 sql 查询获得所需的输出。我没有得到任何解决方案来找到输出。

最佳答案

这应该有效。希望对您有帮助

DECLARE @Master TABLE (EmpID INT, TabId INT)
DECLARE @TableA TABLE (EmpID INT, Name VARCHAR(10))
DECLARE @TableB TABLE (EmpID INT, Name VARCHAR(10))
DECLARE @TableC TABLE (EmpID INT, Name VARCHAR(10))
DECLARE @TableD TABLE (EmpID INT, Name VARCHAR(10))
DECLARE @AttMaster TABLE (TabId INT, Name VARCHAR(10))

INSERT INTO @Master VALUES
('101', '1'),
('102', '2'),
('103', '3'),
('104', '4'),
('105', '1')

INSERT INTO @TableA VALUES
('101', 'A1'),
('102', 'A2'),
('103', 'A3'),
('104', 'A4'),
('105', 'A5')

INSERT INTO @TableB VALUES
('101', 'B1'),
('102', 'B2'),
('103', 'B3'),
('104', 'B4'),
('105', 'B5')

INSERT INTO @TableC VALUES
('101', 'C1'),
('102', 'C2'),
('103', 'C3'),
('104', 'C4'),
('105', 'C5')

INSERT INTO @TableD VALUES
('101', 'D1'),
('102', 'D2'),
('103', 'D3'),
('104', 'D4'),
('105', 'D5')

INSERT INTO @AttMaster VALUES
('1', 'TableA'),
('2', 'TableB'),
('3', 'TableC'),
('4', 'TableD')


;WITH cte_MasterAttMaster AS
(
SELECT m.EmpID ,am.TabId, am.Name
FROM @Master m
JOIN @AttMaster am
on m.TabId = am.TabId
)
,cte_TableABCD(EmpID,Name,TName) AS
(
SELECT *,'TableA' FROM @TableA 
UNION ALL
SELECT *,'TableB' FROM @TableB 
UNION ALL
SELECT *,'TableC' FROM @TableC 
UNION ALL
SELECT *,'TableD' FROM @TableD
)
SELECT mam.EmpID,
      tb.Name
FROM cte_MasterAttMaster AS mam
    JOIN cte_TableABCD AS tb
    ON tb.EmpID = mam.EmpID
    AND tb.TName = mam.Name
ORDER BY mam.EmpID

关于mysql - 编写查询以获得所需的 SQL 表输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25033601/

相关文章:

PHP mysqli - 使用 DELETE 的结果

mysql - 同一查询中 join 和 left-join 的两个语法问题

sql - 我可以使用 Developer 版本的 SQL Server 复制组件吗?

mysql - 如何加快慢速 SQL 查询

c# - 我怎样才能得到一个数据库表的总和到一个变量?

c# - 如何将多个值存储到数组中,然后存储到数据库中?

php - 如何通过 __construct 返回数据库连接以在 mysqli_* 中使用?

sql - Delphi:Paradox DB 字段名称问题(字段名称中的空格)

sql - 在 SQL Server 中加密列上的运算符搜索

SQL表选择