【问题标题】:JOIN vs "just" SELECT加入与“只是”选择
【发布时间】:2017-04-08 06:54:59
【问题描述】:

我有下一张桌子:

date         Income    AccIncome     
--------------------------------    
2016-10-1     10          10         
2017-11-1     20          30    


date         Qty       AccQty     
--------------------------------    
2016-10-1     2          2         
2017-11-1     4          6            


date         Ava       AccAva
--------------------------------    
2016-10-1     3          3         
2017-11-1     4          7

我需要获取:

date       Income AccIncome  Qty   AccQty  Ava  AccAva
------------------------------------------------------
2016-10-1   10      10        2     2       3     3     
2017-11-1   20      30        4     6       4     7

我可以对所有这些表使用选择,但是如何通过 JOIN 来完成呢? JOIN 会比只在所有这些表上使用 SELECT 来获取我需要的字段快得多吗?

【问题讨论】:

    标签: mysql date select join


    【解决方案1】:

    如果行中的连接值始终匹配,您可以在日期上使用内部连接

      select a.date, a.income, a.AccIncome, b.Qty, b.AccQty, c.Ava, c.AccAva
      from table1 a
      inner join table2 b on a.date= b.date 
      inner join table3 c on a.date = c.date
    

    如果不能匹配则左加入

      select a.date, a.income, a.AccIncome, b.Qty, b.AccQty, c.Ava, c.AccAva
      from table1 a
      left join table2 b on a.date= b.date 
      left join table3 c on a.date = c.date
    

    如果您只使用不加入的选择,并且在条件下您获得所有行的笛卡尔积..所以在您的情况下,结果不是两行..您得到 8 行

    并且内/左连接通常比交叉连接(选择所有表)快得多,因为在减少的集合 o 行上工作。为了帮助连接性能,对行进行适当的索引很有用

    join 中的 on 子句和 where 子句中的相同条件做同样的工作 .. 只是在第一种情况下不同的 sintax 你有一个显式 join sintax 更清楚地阅读在 secondo 你有一个隐式连接。

    【讨论】:

    • 这个 JOIN 如何比使用类似的方法快得多:SELECT a.date, a.income, a.AccIncome, b.Qty, b.AccQty, c.Ava, c.AccAva FROM A , B, C 其中 A.DATE = B.date AND B.date=C.date ?
    • 是的 .. 通常要快得多 .. .. 您可以添加索引以获得更好的连接性能 ... 答案已更新 ..
    • where 条件和 on 条件做同样的工作
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2011-10-20
    • 2011-10-02
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多