2013-05-07 88 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