我有下一张桌子:
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
我可以使用所有这些表的select,但是如何通过JOIN完成? JOIN是否比仅仅使用SELECT而不是只选择我需要的字段?
答案 0 :(得分: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
如果你只使用一个选择加入并且在condtion上你获得了所有行的cartesia产品..所以在你的情况下而不是两行作为结果..你得到8行
并且内部/左侧连接通常比交叉连接(对所有表的选择)要快得多,因为在减少的行o行上工作...以获得帮助,连接性能对于行的正确indexinig是有用的
join中的on子句和where子句中相同的条件执行相同的工作..在第一种情况下,只有一个不同的sintax你有一个明确的连接sintax更清楚,在你有一个隐式连接的secondo中读取。 / p>