【问题标题】:Optimize Join Query All left rows and join bit indicator优化 Join Query All left rows 和 join bit 指示符
【发布时间】:2017-01-09 17:11:12
【问题描述】:

所以我有这 3 张桌子:

T1

T1
--
ID
--
1
2
3
4
5

T2

T2
--
ID
--
1
2
3

连接 (N-N) 个 T1 和 T2 的 T1_2

T1_2
-----------
ID_T1|ID_T2
-----|-----
1    |2
3    |2

我想得到以下结果

EXPECETED RESULT
-----------------
IS_CONNECTED|ID_T1
-----------------
1          |1
0          |2
1          |3
0          |4
0          |5

我来了:

SELECT 
  SUM(
    CASE 
      WHEN T1.ID=T1_2.ID_T1 THEN 1
      ELSE 0
    END
  ) IS_CONNECTED,
  T1_2.ID_T1
FROM T1,T1_2
GROUP BY T1_2.ID_T1
;

但它看起来很丑,我认为这样做一定有更漂亮、更优化的方法。

【问题讨论】:

    标签: sql oracle join


    【解决方案1】:

    希望对你有帮助

    select t1.id, decode(id_t1, null, 0,1) IS_CONNECTED 
    from t1, t1_2 where t1.id  =id_t1 (+)
    

    【讨论】:

      【解决方案2】:

      编写此查询的更好方法是:

      SELECT T1.ID, COUNT(T2.ID_T1) as IS_CONNECTED,
      FROM T1 LEFT JOIN
           T1_2
           ON T1.ID = T1_2.ID_T1
      GROUP BY T1.ID;
      

      注意事项:

      • 这使用正确的 ANSI JOIN 语法。
      • 这不使用 Oracle 特定的 DECODE() 函数。
      • 取而代之的是COUNT(),这样写起来更简单,也更容易理解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-02
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多