右连接不会返回右侧表中的所有记录

时间:2015-10-13 12:24:37

标签: mysql sql

我有两张桌子

  

表1:assetdetail:itm_id,itm_slno,itm_desc,..

     

表2:itmtype:typ_id,typname,..

Table2包含6种不同的typname。

但是当我使用右连接时,它只返回4条记录。

enter image description here

我的查询是:

SELECT a.itm_id,i.typname,a.itm_slno,a.itm_desc,a.itm_class from assetdetail
a right join itmtype i on i.typ_id=a.typ_id where a.itm_id!='234'
and itm_class='XYZ' group by i.typname

我需要在连接查询中获取所有6个typename记录。我的查询有什么问题?

1 个答案:

答案 0 :(得分:4)

right join中, first 表中的条件需要进入on子句,而不是where子句:

SELECT a.itm_id, i.typname, a.itm_slno, a.itm_desc, a.itm_class
from assetdetail a right join
     itmtype i
     on i.typ_id = a.typ_id and a.itm_id <> '234' and a.itm_class = 'XYZ'
group by i.typname;

第一个表中的不匹配行包含NULL个值,这些值无法在where中进行比较。

但是我会把它写成left join。大多数人发现逻辑更容易理解:将所有行保留在第一个表中,无论是否匹配:

SELECT a.itm_id, i.typname, a.itm_slno, a.itm_desc, a.itm_class
from itmtype i left join
     assetdetail a 
     on i.typ_id = a.typ_id and a.itm_id <> '234' and a.itm_class = 'XYZ'
group by i.typname;

条件保持不变。