如何从 mysql 中的 Outer Join Table(超过 2 个 table)获取值
How to Get a Value From Outer Join Table (more than 2 table) in mysql
我正在尝试从外连接中获取值 table 但没有成功..需要你的帮助..
1)假设Tbl_report如下
RID | CAT_ID | EXT_CODE
----------------------------------
1 | C01 | HW06
2 | C02 | SW04
3 | C03 | IT04
4 | C04 | HW04
5 | C05 | SW02
WHERE EXT_CODE @ Tbl_report 以上是 引用自超过 1 table (来自 Tbl_SW 的 SCODE 列、来自 Tbl_HW 的 HCODE 列或 ICODE 列来自 Tbl_IT) 然后,显示引用 table 的 content(这是来自 [=53 的 SNAME 列的内容=]、HNAME 来自 Tbl_HW 或 INAME 来自 Tbl_IT)
2)Tbl_SW
SID | SCODE | SNAME
-----------------------------------
1 | SW02 | SEC 2
2 | SW04 | SEC 4
3 | SW06 | SEC 6
3)Tbl_HW
HID | HCODE | HNAME
-----------------------------------
1 | HW02 | HOC 2
2 | HW04 | HOC 4
3 | HW06 | HOC 6
4)Tbl_IT
IID | ICODE | INAME
-----------------------------------
1 | IT02 | ITC 2
2 | IT04 | ITC 4
3 | IT06 | ITC 6
预期结果如下:
RID | CAT_ID | EXT_CODE
----------------------------------
1 | C01 | HW06 - [HOC 6]
2 | C02 | SW04 - [SEC 4]
3 | C03 | IT04 - [ITC 4]
4 | C04 | HW04 - [HOC 4]
5 | C05 | SW02 - [SEC 2]
用这个select声明
SELECT
`[RID]`,
`[CAT_ID]`,
CONCAT(`[EXT_CODE]`, ' - ',
`[SNAME]` ) result
FROM
Tbl_report tr
LEFT join (SELECT * FROM Tbl_SW UNION SELECT * FROM Tbl_HW UNION SELECT * FROM Tbl_IT) ts
ON tr.`[EXT_CODE]` = ts.`[SCODE]`
你得到这个结果
RID CAT_ID result
1 C01 HW06 - HOC 6
2 C02 SW04 - SEC 4
3 C03 IT04 - ITC 4
4 C04 HW04 - HOC 4
5 C05 SW02 - SEC 2
DBfiddle 示例 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f78a88f019df887666ac059d39ba1f48
之所以可行,是因为您要连接的表具有相同的结构。
我放在那里的左连接是因为在你的第一个例子中你有 it03
SELECT
Tbl_report.RID, Tbl_report.CAT_ID, Tbl_report.EXT_CODE, Tbl_SW.SID,
Tbl_SW.SNAME , Tbl_HW.HID ,Tbl_HW.HNAME, Tbl_IT.IID, Tbl_IT.INAME
FROM (((Tbl_report
INNER JOIN Tbl_SW ON Tbl_Report.EXT_CODE=Tbl_SW.SCODE)
INNER JOIN Tbl_Hw ON Tbl_Report.EXT_CODE = Tbl_HW.HCODE)
INNER JOIN Tbl_IT ON Tbl_Report.EXT_CODE=Tbl_IT.ICODE);
我正在尝试从外连接中获取值 table 但没有成功..需要你的帮助..
1)假设Tbl_report如下
RID | CAT_ID | EXT_CODE
----------------------------------
1 | C01 | HW06
2 | C02 | SW04
3 | C03 | IT04
4 | C04 | HW04
5 | C05 | SW02
WHERE EXT_CODE @ Tbl_report 以上是 引用自超过 1 table (来自 Tbl_SW 的 SCODE 列、来自 Tbl_HW 的 HCODE 列或 ICODE 列来自 Tbl_IT) 然后,显示引用 table 的 content(这是来自 [=53 的 SNAME 列的内容=]、HNAME 来自 Tbl_HW 或 INAME 来自 Tbl_IT)
2)Tbl_SW
SID | SCODE | SNAME
-----------------------------------
1 | SW02 | SEC 2
2 | SW04 | SEC 4
3 | SW06 | SEC 6
3)Tbl_HW
HID | HCODE | HNAME
-----------------------------------
1 | HW02 | HOC 2
2 | HW04 | HOC 4
3 | HW06 | HOC 6
4)Tbl_IT
IID | ICODE | INAME
-----------------------------------
1 | IT02 | ITC 2
2 | IT04 | ITC 4
3 | IT06 | ITC 6
预期结果如下:
RID | CAT_ID | EXT_CODE
----------------------------------
1 | C01 | HW06 - [HOC 6]
2 | C02 | SW04 - [SEC 4]
3 | C03 | IT04 - [ITC 4]
4 | C04 | HW04 - [HOC 4]
5 | C05 | SW02 - [SEC 2]
用这个select声明
SELECT
`[RID]`,
`[CAT_ID]`,
CONCAT(`[EXT_CODE]`, ' - ',
`[SNAME]` ) result
FROM
Tbl_report tr
LEFT join (SELECT * FROM Tbl_SW UNION SELECT * FROM Tbl_HW UNION SELECT * FROM Tbl_IT) ts
ON tr.`[EXT_CODE]` = ts.`[SCODE]`
你得到这个结果
RID CAT_ID result
1 C01 HW06 - HOC 6
2 C02 SW04 - SEC 4
3 C03 IT04 - ITC 4
4 C04 HW04 - HOC 4
5 C05 SW02 - SEC 2
DBfiddle 示例 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f78a88f019df887666ac059d39ba1f48
之所以可行,是因为您要连接的表具有相同的结构。
我放在那里的左连接是因为在你的第一个例子中你有 it03
SELECT
Tbl_report.RID, Tbl_report.CAT_ID, Tbl_report.EXT_CODE, Tbl_SW.SID,
Tbl_SW.SNAME , Tbl_HW.HID ,Tbl_HW.HNAME, Tbl_IT.IID, Tbl_IT.INAME
FROM (((Tbl_report
INNER JOIN Tbl_SW ON Tbl_Report.EXT_CODE=Tbl_SW.SCODE)
INNER JOIN Tbl_Hw ON Tbl_Report.EXT_CODE = Tbl_HW.HCODE)
INNER JOIN Tbl_IT ON Tbl_Report.EXT_CODE=Tbl_IT.ICODE);