2016-10-19 20 views
0

に参加します。結果は次のようになります。重複行は、私がどの次のようにクエリを記述しようとしています(postgresの)

bsgId| sysId | gameNo | nameOfUser | scoreId 
-------------------------------------------------- 
1234 | abcde | G-12 | admin  | G-12/1/1 
1235 | abcdf | G-15 | admin  | G-15/1/3 
1234 | abcdf | G-12 | user1  | G-12/1/8 
1237 | abcdf | G-16 | user1  | G-16/2/4  

ただし、パラメータテーブルの値が大きく、system_docのcity_idカラムにNULL値があります。クエリの左ジョイント部分を追加すると、次のようになります。

bsgId| sysId | gameNo | nameOfUser | scoreId | city 
-------------------------------------------------- 
1234 | abcde | G-12 | admin  | G-12/1/1 | city1 
1235 | abcdf | G-15 | admin  | G-15/1/3 | city5 
1235 | abcdf | G-15 | admin  | G-15/1/3 | 
1234 | abcdg | G-12 | user1  | G-12/1/8 | city4 
1234 | abcdg | G-12 | user1  | G-12/1/8 | 
1237 | abcdf | G-16 | user1  | G-16/2/4 | 

3番目と5番目のような行はありません。市の列にnullがあり、 "は都市のフィールドを除いてまったく同じデータを持っているこれらの行を避けるために"(実際には最後の行のように都市はヌルになる可能性がありますが、私はdistinct on(scoreId)を使用しましたが、行#2を失い、行#3を失ってしまったので動作しませんでした。

都市のフィールドにnullが含まれている重複行を削除するにはどうすればよいですか?私の質問がはっきりしていることを願っています

+0

私が知る限り、あなたは 'distinct on(bsgId、sysId、gameNo、nameOfUser、scoreId)'を使います。 'distinct on(scoreId) 'だけでなく、scoreIdはあなたが書いたすべてのフィールドでユニークなので、実際には同じです。 –

+0

しかし、それでも、私は望ましくない結果を得ました。 nullの都市を含む行を削除する代わりに、このクエリによってnull以外の行が削除されることがあります –

答えて

1

これはpostgresqlのバグです。

がsd.city_idにパラメータpに参加左= p.id

この

left join parameter p on p.id = p.id 
WHERE sd.city_id = p.id 

(私はこれに答えているので、探している人は、今、このバグについて知っているだろう)

をお試しください
関連する問題