2012-10-04 104 views
1
branch_id branch_name 
1  Branch A 
2  Branch B 

user_id username branch_id 
1 abc  1 
2 def  1 
3 ghi  2 
4 jkl  1 
5 lmn  2 
6 opq  2 

查询1个为什么左连接和内连接返回相同的结果

query1="select a.branch_id,b.branch_id,a.branch_name from branch a LEFT JOIN user_mast b on a.branch_id=b.branch_id"; 

查询2

$query2="select a.branch_id,b.branch_id,a.branch_name from branch a INNER JOIN user_mast b on a.branch_id=b.branch_id"; 

WHY LEFT JOIN和INNER JOIN的结果是一样的。

+0

你期待什么不同? –

+0

像这里我是新来的加入,所以如果一个新用户将决定使用哪个连接类型,如果内部和左侧,并给出类似的结果 – Vikki

+0

你问'为什么左加入和右加入结果是相同的'但你在代码中执行左加入和INNER JOIN – IvoTops

回答

1

您没有使用RIGHT JOIN查询2.之所以LEFT JOININNER JOIN结果都是一样的,因为表branch的所有记录对表user_mast至少一个匹配。

INNER JOINLEFT JOIN之间的主要区别是,LEFT JOIN仍然显示在该LEFT一侧的记录,即使他们对RIGHT侧表不匹配。

SQLFiddle Demo (the difference)

+0

如果我只想显示2条记录分支a和分支b匹配表b – Vikki

+0

你能扩展你的问题吗?可能有很多可能的解决方案,“LIMIT”,“GROUP”,或者可能是“DISTINCT”,具体取决于你想要的。你能给我样本结果吗? –

+0

像表a是分支主表和表b是所有用户。表a有2条记录,表b有10条记录。我想我应该只显示2条记录作为表a有2条记录,但显示表b字段也匹配表a值。 – Vikki

0

,因为你的左表中有2条记录,右表只有2匹配的记录。所以在这种情况下,如果左连接,它将获取与连接相同的结果。如果交换表,那么您将知道使用左连接。

0

既然你有左表中的所有branch_id与右表的branch_id匹配

+0

如果我只想显示2条记录分支a和分支b匹配表b – Vikki