如何从 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);