Mysql 与左连接不同

Mysql 与左连接不同,mysql,Mysql,我从不同的表中获取记录,为了避免重复行,我使用了GROUP BY子句,DISTINCT比GROUP BY快,所以我尝试使用DISTINCT连接查询(用DISTINCT替换GROUP BY),但它也获取重复的记录。我想知道如何实现优化、最快和高效的查询 查询示例: 这里的索引设置在项目表的projectId字段上 SELECT DISTINCT p.*, p.projectId as proId, plat.*, con.*, dom.*, sta.*, tech.*, role.*, pimg.

我从不同的表中获取记录,为了避免重复行,我使用了
GROUP BY
子句,
DISTINCT
GROUP BY
快,所以我尝试使用
DISTINCT
连接
查询(用
DISTINCT
替换
GROUP BY
),但它也获取重复的记录。我想知道如何实现优化、最快和高效的查询

查询示例:

这里的索引设置在项目表的
projectId
字段上

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

使用DISTINCT mysql将返回所有唯一的行。如果在列的一个或某些部分使用GROUP BY,则情况不同。您可能希望使用GROUP BY not DISTINCT。

您能给出一个使用
DISTINCT
时返回的“重复”记录的示例吗?请注意,resultset中的每一列都必须相同,才能执行操作。
DISTINCT
。如果他仅对某些列使用GROUP BY,则他将无法检索其他列。select子句中只能使用group by子句和AGGRATE函数中的列。它不是可移植的sql,但可以在MySQL中使用,但其他列值不是确定性的。但这是否合理取决于用例。