我有两张表如下
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
答案 0 :(得分: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';
答案 1 :(得分:2)
您的加入条件:[ON a.Date = '25-12-2011'
]未在表b上建立任何条件,因此,表b中的每一行都连接到表a中具有该指定日期的每一行。
从查看这两个表格来看,它们是应该在日期还是在CompanyID上加入并不明显。
答案 2 :(得分: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'
答案 3 :(得分:0)
没有LEFT和没有WHERE子句
Select a.date,
a.companyname,a.CompanyPrice,b.TodayPrice
from DailyData a
JOIN ReportData b
ON a.CompanyId= b.CompanyId