【问题标题】:How in inner join few table consecutively in single sql [duplicate]如何在单个sql中连续连接几个表[重复]
【发布时间】:2020-02-10 15:49:31
【问题描述】:

我目前有几个 5 表,我想将表 1 内连接到表 2,然后将表到 2 到表 3,依此类推......

我已经用几个分离的内部连接尝试过这个,但是如何只用 1 个 sql 得到相同的结果

SELECT table1.CW_S_EVT,table2.CW_S_TYP, table2.CW_S_SERVER
FROM table1 INNER JOIN table2
ON table1.CW_S_EVT = table2.CW_S_EVT;

SELECT table2.CW_S_EVT,table2.CW_S_TYP, table3.CW_S_TPL
FROM table2 INNER JOIN table3
ON table2 .CW_S_TYP = table3.CW_S_TYP

SELECT  table3.CW_S_TPL, table4.CW_L_TPL,table4.CW_CONTENT
FROM table3 INNER JOIN table4
ON table3.CW_S_TPL = table4.CW_S_TPL

SELECT table1.CW_S_EVT,table5.CW_S_VAR, table5.CW_L_VAR
FROM table1 INNER JOIN table5
ON table1.CW_S_EVT = table5.CW_S_EVT;

这是我在互联网上找到的代码,但与我的情况不符。

SELECT * 
FROM table1 
INNER JOIN table2
      ON table1.primaryKey=table2.table1Id
INNER JOIN table3
      ON table1.primaryKey=table3.table1Id

【问题讨论】:

  • 多表连接的语法正确。由于我们完全不知道您要达到什么目的,因此在您解释该查询有什么问题之前,我们无法为您提供任何进一步的帮助!您可能愿意与我们分享一些示例数据。
  • 嗨,谢谢你的回复,多表连接是将表 1 和表 2、表 1 和表 3 连接起来,但我需要将表 1 连接到表 2,然后将表连接到 2到表 3,依此类推。
  • 我在这里遇到了同样的问题:stackoverflow.com/questions/11321354/…
  • 那你为什么不这样做,而不是在 table1 上加入 table3?

标签: mysql sql


【解决方案1】:
SELECT table1.CW_S_EVT,table3.CW_S_TYP,table4.CW_S_TPL, table5.CW_S_VAR
FROM table1
INNER JOIN table2 ON table1.CW_S_EVT = table2.CW_S_EVT 
    INNER JOIN table3 ON table2.CW_S_TYP = table3.CW_S_TYP 
        INNER JOIN table4 ON table3.CW_S_TPL = table4.CW_S_TPL 
            INNER JOIN table5 ON table1.CW_S_EVT = table5.CW_S_EVT 

感谢所有友好的回答,但我终于找到了这个工作,在这里记录一下也许以备将来使用。^^

【讨论】:

  • 欢迎接受您自己的答案
【解决方案2】:

试试这个

SELECT
    table1.CW_S_EVT as t1_CW_S_EVT, 
    table2.CW_S_TYP as t2_CW_S_TY, 
    table2.CW_S_SERVE as t2_CW_S_SERVE, 
    table2.CW_S_EVT as t2_CW_S_EVT, 
    table3.CW_S_TPL as t3_CW_S_TPL, 
    table4.CW_L_TPL as t4_CW_L_TPL, 
    table4.CW_CONTENT as t4_CW_CONTENT,
    table5.CW_S_VAR as t5_CW_S_VAR, 
    table5.CW_L_VAR as t5_CW_L_VAR

FROM
    table1, table2, table3, table4, table5 
where  
    table1.CW_S_EVT = table2.CW_S_EVT AND 
    table2 .CW_S_TYP = table3.CW_S_TYP AND 
    table3.CW_S_TPL = table4.CW_S_TPL AND 
    table1.CW_S_EVT = table5.CW_S_EVT;

【讨论】:

    【解决方案3】:

    您需要的是left join 您的表格符合您的标准。由于这将产生null 值,因此添加coalesce 函数将能够帮助我们提供符合您条件的值。

    如果需要,附加 distinct 关键字。

    SELECT distinct coalesce(table1.CW_S_EVT, table2.CW_S_EVT, table3.CW_S_TPL) 
        , coalesce(table2.CW_S_TYP, table4.CW_L_TPL, table5.CW_S_VAR)
        , coalesce(table2.CW_S_SERVER, table3.CW_S_TPL, table4.CW_CONTENT, table5.CW_L_VAR)
    FROM table1 
    LEFT JOIN table2 ON table1.CW_S_EVT = table2.CW_S_EVT;
    LEFT JOIN table3 ON table2.CW_S_TYP = table3.CW_S_TYP
    LEFT JOIN table4 ON table3.CW_S_TPL = table4.CW_S_TPL
    LEFT JOIN table5 ON table1.CW_S_EVT = table5.CW_S_EVT;
    

    【讨论】:

      猜你喜欢
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 2019-05-16
      相关资源
      最近更新 更多