Sql 从数据库查询返回不同的行

Sql 从数据库查询返回不同的行,sql,distinct,Sql,Distinct,我对SQL相当陌生,因此如果有一个简单的解决方案,我深表歉意 我有一段SQL,它在3个表上执行连接 SELECT a.group_leader, b.forum_name FROM flightuser_group a INNER JOIN flightacl_groups c ON a.group_id = c.group_id JOIN flightforums b ON c.forum_id = b.forum_id WHERE a.user_id

我对SQL相当陌生,因此如果有一个简单的解决方案,我深表歉意

我有一段SQL,它在3个表上执行连接

    SELECT a.group_leader, b.forum_name
    FROM flightuser_group a
    INNER JOIN flightacl_groups c ON a.group_id = c.group_id
    JOIN flightforums b ON c.forum_id = b.forum_id
    WHERE a.user_id = '60'
    ORDER BY a.group_leader DESC
此查询返回以下结果:

    group_leader   forum_name
    1              tmpSQJ
    0              jobby7
    0              jobby5
    0              tmpSQJ
我试图只保留第一个tmpSQJ条目,删除第二个条目,但无法确定DISTICT条款的去向

非常感谢。

对于MySQL,在ORDER BY之后添加一个限制1

对于MS SQL,请在选择后添加前1


这两种风格只会获得记录集中的第一条记录。

您可以尝试一个行为基本相同的组:

SELECT a.group_leader, b.forum_name
FROM flightuser_group a
INNER JOIN flightacl_groups c ON a.group_id = c.group_id
JOIN flightforums b ON c.forum_id = b.forum_id
WHERE a.user_id = '60'
GROUP BY b.forum_name
ORDER BY a.group_leader DESC
您还可以考虑对flightforums使用内部连接,尝试以下方法:

 SELECT MAX(a.group_leader), b.forum_name     
 FROM flightuser_group a     INNER JOIN flightacl_groups c ON a.group_id = c.group_id   
   JOIN flightforums b ON c.forum_id = b.forum_id    
    WHERE a.user_id = '60' 
    GROUP BY  b.forum_name  
    ORDER BY a.group_leader DESC 

您使用的是哪种风格的SQL?MySQL?2005年SQL小姐?你可能想要一个最上面的从句,而不是一个明显的从句。我使用的是mysqlsql,之所以会得到多条tmpSQJ记录,是因为SQL不知道哪一列使它与众不同。在您的示例中,1,tmpSQJ和0,tmpSQJ是不同的行,因为组_领导人不同。只获取一个tmpSQJ的一种方法是将flightuser_group表中的group_leader更新为相同的数字。Hello rajah9。使用“限制1”只会给我一条记录,我需要除最后一个副本以外的所有记录。我对你的Q的评论有意义吗,@SQJ?如果不清楚,请发表另一条评论。你好,rajah9。你的评论是有道理的。不幸的是,我无法更新flightuser_组表,因为该表是在我的控制之外管理的,我只能从中读取。上述查询不起作用。由于group by中没有group_leader,并且如果尝试添加到group by,它仍将返回所有行,因为group_leader不同,即使论坛名称相同