在此查询中澄清PL / SQL JOINS

时间:2011-04-21 10:34:23

标签: sql

我有一个Query返回377行

Select Cm.Customerid,Cm.Customername,Ad.Addressid,Ad.Addressline1,
Stm.Statename,Ctm.Cityname,Dm.Districtname 
 From Crm.Customers Cm 
inner join Crm.Customeraddress Ad on Ad.Customerid=Cm.Customerid
Inner Join Ehis.Statemaster Stm On Stm.Stateid=Ad.Stateid
Inner Join Ehis.Citymaster Ctm On Ctm.Cityid=Ad.Cityid
inner join Ehis.Districtmaster dm on Dm.Districtid=Ad.Districtid

但如果我再添加一个连接(即)

Select 
Cm.Customerid,Cm.Customername,Ad.Addressid,Ad.Addressline1,
Stm.Statename,Ctm.Cityname,Dm.Districtname 
 From Crm.Customers Cm 
inner join Crm.Customeraddress Ad on Ad.Customerid=Cm.Customerid
inner join crm.agreements ag on ag.customerid=cm.customerid
Inner Join Ehis.Statemaster Stm On Stm.Stateid=Ad.Stateid
Inner Join Ehis.Citymaster Ctm On Ctm.Cityid=Ad.Cityid
inner join Ehis.Districtmaster dm on Dm.Districtid=Ad.Districtid

我的查询没有返回任何行。使用内部联接为城市区域主人,城市区主人是否有任何问题。请澄清相同的内容。

1 个答案:

答案 0 :(得分:0)

此问题似乎与statemastercitymasterdistrictmaster无关,因为这些问题位于返回数据的原始查询中。

附加行(下面)看起来是罪魁祸首。

inner join crm.agreements ag on ag.customerid=cm.customerid

据推测,agreements表上没有customerid表上匹配customers的记录。

为了证明这种情况,您可以将该行更改为

left join crm.agreements ag on ag.customerid=cm.customerid

如果您收回377条记录,则需要检查agreements中的数据。