0

私は別のテーブルからレコードをフェッチしていますが、句を使用している重複行を避けるためにGROUP BY、( の代わりに) を使用して大量のクエリを試しましたが、重複レコードもフェッチします。最適化された、最速で効率的なクエリをどのように達成できるか考えてみてください。DISTINCTGROUP BYJOINDISTINCTGROUP BY

クエリのサンプル:

projectIdここでは、projects テーブルのフィールドにインデックスが設定されています。

SELECT DISTINCT p.*, p.projectId as proId, plat.*, con.*, dom.*, sta.*, tech.*, role.*, pimg.*, c.*, dur.* 
                FROM projects p 
                LEFT JOIN projectplatforms pplat ON p.projectId = pplat.projectId JOIN platforms plat ON plat.platformId = pplat.platformId 
                LEFT JOIN projectcountries pcon ON p.projectId = pcon.projectId JOIN countries con ON con.countryId = pcon.countryId 
                LEFT JOIN projectdomains pdom ON p.projectId = pdom.projectId JOIN domains dom ON dom.domainId = pdom.domainId 
                LEFT JOIN statuses sta ON p.statusId = sta.statusId 
                LEFT JOIN projecttechs ptech ON p.projectId = ptech.projectId JOIN technologies tech ON tech.techId = ptech.techId 
                LEFT JOIN projectroles prole ON p.projectId = prole.projectId JOIN roles role ON role.roleId = prole.roleId 
                LEFT JOIN projectimages pimg ON p.projectId = pimg.projectId
                LEFT JOIN clients c ON p.clientId = c.clientId 
                LEFT JOIN durations dur ON p.durationId = dur.durationId 
                WHERE p.featured = 1 
                ORDER BY p.year DESC
4

1 に答える 1

0

DISTINCT を使用すると、mysql はすべての一意の行を返します。列の一部または一部で GROUP BY を使用した場合は、同じではありません。DISTINCT ではなく GROUP BY を使用することをお勧めします。

于 2012-10-16T09:46:18.373 に答える