Как получить значение из внешней таблицы соединений (более 2-х таблиц) в mysql - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь получить значение из внешней таблицы соединений, но это не сработало .. Нужна ваша помощь ..

1) Предположим, Tbl_report, как показано ниже

   RID    |  CAT_ID  |  EXT_CODE
---------------------------------- 
    1     |    C01   |   HW06  
    2     |    C02   |   SW04 
    3     |    C03   |   IT04 
    4     |    C04   |   HW04 
    5     |    C05   |   SW02  

ГДЕ EXT_CODE @ Tbl_report выше - , ссылаясь на более чем 1 таблицу (столбец SCODE из Tbl_SW, столбец HCODE из Tbl_HW или столбец ICODE изTbl_IT), затем отобразите содержимое таблицы ссылок (содержимое из столбца SNAME из Tbl_SW, 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]

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019
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);
0 голосов
/ 03 ноября 2019

С этим оператором выбора

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

Это работает, потому что ваши таблицы для объединения имеют одинаковыеструктура.

Левое соединение я положил туда, потому что в вашем первом примере оно было в нем03

...