2013-05-07 89 views
0

我有两个表像下在我的sql脚本中,LEFT JOIN给出的输出像CROSS JOIN?

DailyData 

Date  Id CompanyName CompanyPrice CompanyId 
21-12-2011 123 ABC corp 120   535 
25-12-2011 352 Z Edge  101   444 
25-12-2011 352 Z Edge  100   444 

primary key is `date` and `Id` 

ReportData 

RId Date  CompanyName TodayPrice CompanyId 
1 25-12-2011 Z Edge  230   444 

primary key is only `RId` 

现在我已经使用以下LEFT JOIN两个以上表所示:

Select a.date,a.companyname,a.CompanyPrice,b.TodayPrice 
from DailyData a LEFT JOIN ReportData b ON 
a.companyid= b.companyid where a.Date = '25-12-2011' 

但不是两个记录这是给两个以上的记录(same records multiple times)

这是为什么?

请帮我纠正我的sql查询。

以上数据预期输出应该是:

date  companyname companyprice todaysprice 
25-12-2011 Z Edge  101   230 
25-12-2011 Z Edge  100   230 

回答

2

您当前查询缺少JOIN实际列,结果你得到所有满足日期条件的行的CROSS JOIN结果。您将要使用:

Select a.date,a.companyname,a.CompanyPrice,b.TodayPrice 
from DailyData a 
LEFT JOIN ReportData b 
    ON a.CompanyId= b.CompanyId 
WHERE a.Date = '25-12-2011'; 

SQL Fiddle with Demo

+0

@ashuthinks你能扩大你的数据在你的OP,并且告诉你做了什么?或者用一些示例数据创建一个sql小提琴? – Taryn 2013-05-08 11:06:16

1

我相信你需要像

Select a.date,a.companyname,a.CompanyPrice,b.TodayPrice 
from DailyData a 
LEFT JOIN ReportData b ON 
(b.CompanyId = a.CompanyId) 
WHERE a.Date = '25-12-2011' 
2

您的加盟条件:ON a.Date = '25-12-2011']没有建立的表B的任何条件,因此,在B表的每一行加入到每一行表与该指定日期。

从查看这两个表格来看,它们应该在日期还是在CompanyID上进行连接并不明显。

0

sql fiddle

没有留下任何与没有WHERE子句

Select a.date, 
    a.companyname,a.CompanyPrice,b.TodayPrice 
from DailyData a 
JOIN ReportData b 
    ON a.CompanyId= b.CompanyId