我有下一张 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/