2017-02-17 8 views
0

私は最初に複数のテーブルに参加する必要があり、すべてのテーブルには同じ量の行があり、完全に結合します。しかし、追加された日付を除いて、まったく同じ行を持つ最後のテーブルに参加すると、データがユーザーあたりの月数に複製されます。いずれかの行だけに参加することは可能ですか?どちらが問題ではない。 右テーブルから1行だけに内部的に結合すること

$rekeninge = DB::connection('odbc') 
->table($this->mgk . '.D000M00L') 
->leftJoin($this->div . '.D050M00P', $this->div . '.D050M00P.RKNR', '=', $this->mgk . '.D000M00L.RKNR') 
->leftJoin($this->mgk . '.VFDIND00P', $this->mgk . '.VFDIND00P.F06', '=', $this->mgk . '.D000M00L.RKNR') 
->leftJoin($this->mgk . '.VINDEXP', $this->mgk . '.VINDEXP.VNAAM', '=', $this->mgk . '.VFDIND00P.VFDVELDID') 
->where([ 
    'F02' => 'A', 
    'F165' => 'D' 
]) 
->get(); 

+0

「問題ではありませんどちらが「それは問題なのですか?それは実際には貧弱なデザインの症状ではありません! – Strawberry

+0

毎月そのテーブルが債務者の毎月の変更で更新されるので問題はありません。私は変更を気にしません私は債務者を求めるだけですすべての行に記録されている名前と姓。 – DaVluuu

答えて

1

あなたは結果列のby 1をgroupする必要があり、事前にありがとう:

https://laravel.com/docs/5.4/queries#ordering-grouping-limit-and-offset

ので、あなたのクエリは、このようなものになってしまうでしょう:

$rekeninge = DB::connection('odbc') 
->table($this->mgk . '.D000M00L') 
->leftJoin($this->div . '.D050M00P', $this->div . '.D050M00P.RKNR', '=', $this->mgk . '.D000M00L.RKNR') 
->leftJoin($this->mgk . '.VFDIND00P', $this->mgk . '.VFDIND00P.F06', '=', $this->mgk . '.D000M00L.RKNR') 
->leftJoin($this->mgk . '.VINDEXP', $this->mgk . '.VINDEXP.VNAAM', '=', $this->mgk . '.VFDIND00P.VFDVELDID') 
->where([ 
    'F02' => 'A', 
    'F165' => 'D' 
]) 
->groupBy('month') 
->get(); 
+0

パフォーマンスのメリットを除いて、集計関数が存在しない場合、GROUP BY句はまれなことではありません。 – Strawberry

関連する問題