0

我有两个如下表

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
4

4 回答 4

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

于 2013-05-07T17:20:56.303 回答
2

您的联接条件: [ ON a.Date = '25-12-2011'] 不会在表 b 上建立任何条件,因此,表 b 中的每一行都与指定日期的表 a 中的每一行联接。

从这两个表来看,它们是否应该在 date 或 CompanyID 上加入并不明显。

于 2013-05-07T17:25:12.843 回答
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'
于 2013-05-07T17:20:48.830 回答
0

sql小提琴

没有 LEFT 也没有 WHERE 子句

Select a.date,
  a.companyname,a.CompanyPrice,b.TodayPrice 
from DailyData a 
JOIN ReportData b 
  ON a.CompanyId= b.CompanyId
于 2013-05-08T10:29:22.353 回答