mysql - JOIN 与 "just"选择

标签 mysql date select join

我有下一张 table :

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 来选取我需要的字段要快得多?

最佳答案

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

  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行

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

join中的on子句和where子句中的相同条件做相同的工作..只是在第一种情况下不同的语法,您有一个显式联接语法,在第二种情况下您有一个隐式联接,更容易阅读。

关于mysql - JOIN 与 "just"选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43291126/

相关文章:

c - 输入错误后循环返回,fgetc(stdin) 问题和循环

jquery - 如何使用 jQuery 在 Bootstrap 中预选 <select> 列表项

php - 如何合并多个 mySQL 查询?

mysql - 按组排序和倒序?

php - 将元标记与 PHP 一起用于搜索引擎

mysql - 错误 BC30456 'Form' 不是 'Windows' 的成员

mysql - 连接两个表 SQL 查询中正确对齐的字段

r - 在 R 中创建 "Week_Start"变量

mysql - 使用日期对组使用子查询计算索引位置

java - 如何在java中正确格式化日期