【问题标题】:How to Get a Value From Outer Join Table (more than 2 table) in mysql如何从 mysql 中的外部连接表(超过 2 个表)中获取值
【发布时间】:2020-02-29 03:04:39
【问题描述】:

我试图从外部连接表中获取一个值,但没有成功..需要你的帮助..

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 以上是来自多个表(来自 Tbl_SW 的列 SCODE,列 HCODE 来自 Tbl_HW 或列 ICODE 来自 Tbl_IT)然后,显示参考表的 内容(这是来自 Tbl_SW 的列 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]

【问题讨论】:

  • 嗨@simon,你能告诉我们你期望得到什么吗?结果——看起来如何?谢谢!
  • 嗨@VBokšić,我在上面更新了我的预期结果.. tq

标签: mysql subquery outer-join correlated-subquery


【解决方案1】:

有了这个选择语句

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

【讨论】:

  • 它在所有Databsesystem下都可以使用mysql不喜欢括号,更多的是ms sql样式,我添加了反引号,这样mysql也不介意
【解决方案2】:
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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2021-10-16
    • 2022-12-17
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多