0

次のような2つのテーブルがあります

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'

しかし、2 つのレコードではなく、2 つ以上のレコードを提供しています(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

結合条件: [ ON a.Date = '25-12-2011'] はテーブル b に条件を設定しないため、テーブル b のすべての行は、指定された日付でテーブル a の各行に結合されます。

2 つのテーブルを見ると、日付で結合する必要があるか、CompanyID で結合する必要があるかは明らかではありません。

于 2013-05-07T17:25:12.843 に答える
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 に答える
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 に答える