2017-09-08 7 views
-1

私は別名に問題がありますすべての行でidによって私は100の結果があります。 私はplayer_id = 1のために聴解の結果を表示する必要がありますが、結果は約250件しかありません。それは約400である必要がありますdistinct - mysql result

SELECT city.player_id, city.team_id, country.gender, account.first_name, 
account.last_name, 
city.position,player.status,GROUP_CONCAT(DISTINCT(playing)) 
FROM account 
JOIN player 
ON account.id = player.account_id JOIN city 
ON player.id = city.player_id JOIN player_activity 
ON player.id = player_activity.player_id JOIN team 
ON city.team_id = country.id 
GROUP BY player.id; 

これは何故ですか?

+1

GROUP BYが無効です。より新しいMySQLバージョンでは実行されません(互換モードでない限り)、古いMySQLバージョンでは予期しない結果が返される可能性があります。 GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません。 – jarlh

答えて

0

あなただけの集約されていない列の1によってグループ化され、MySQLができますあなたがこれを行うが、それは矛盾した結果

を生成

試してみてください。

select city.player_id, city.team_id, country.gender, account.first_name, 
account.last_name, 
city.position,player.status,GROUP_CONCAT(DISTINCT(playing)) 
FROM account 
JOIN player 
ON account.id = player.account_id JOIN city 
ON player.id = city.player_id JOIN player_activity 
ON player.id = player_activity.player_id JOIN team 
ON city.team_id = country.id 
GROUP BY city.player_id, city.team_id, country.gender, account.first_name, 
account.last_name, 
city.position,player.status 

0

論理的に、SQLにあなたに与えることを求める情報は意味をなさない。あなたのクエリは、player.idごとに個別のレコードを返すようにSQLに依頼していますが、この情報とともに表示される他のいくつかの列を表示することも指定しています。

データベースの複数の行を持つ(teamId、genderなどの)行のリストをSQLに表示するには、それぞれのplayer.idが1つの結果(行)?

本質的に、実行しようとしているクエリがこの理由で無効であり、SQLはこれにより奇妙な/スローエラーを起こしています。 teamIdやgenderのようなフィールドを集めることができないとすれば、私はSQLがあなたに何をしたいかについて少し混乱していると思います。あなたが本当に望んでいるのは、GROUP BYではなく、ORDER BYへのSQLです。なぜなら、結果をplayer.idで分類するのではなくむしろ分類したいからです。 "GROUP BY"を "ORDER BY"に変更すると、あなたが求めている結果が表示されます。お役に立てれば。