Mysql SQL:选择特定列上唯一的行

Mysql SQL:选择特定列上唯一的行,mysql,sql,Mysql,Sql,我有一个问题表,上面有两个问题,一对一对,一对一对 id1 question1 id2 question2 1123 q1 2 q2 1123 q1 3 q3 1123 q1 1231 q142 2431 q12 1231 q142 ID不是增量的,可以认为是随机的 我想选择在id1和id2中都是唯一的元组,例如,对于上面的示例,所需的输出可能是

我有一个问题表,上面有两个问题,一对一对,一对一对

id1     question1    id2    question2
1123    q1           2      q2
1123    q1           3      q3
1123    q1           1231   q142
2431    q12          1231   q142
ID不是增量的,可以认为是随机的

我想选择在id1和id2中都是唯一的元组,例如,对于上面的示例,所需的输出可能是:

id1     question1    id2    question2
1123    q1           2      q2
2431    q12          1231   q142
提前感谢。

使用嵌套查询

SELECT *
FROM (SELECT *
      FROM yourTable
      GROUP BY id1) AS x
GROUP BY id2
然而,这将如何进行分组是不可预测的。如果子查询选择

id1     id2
1123    1231
2431    1231
那么最终结果将是:

id1     id2
1123    1231


我不知道如何更改它,使其以最可能的组合生成结果。

您也可以使用排名

SELECT id1,
       question1,
       id2,
       question2
  FROM (SELECT CASE id1 
                    WHEN @curType 
                    THEN @curRow := @curRow + 1 
                    ELSE @curRow := 1 AND @curType := id1 
                END rank,
                id1,
                question1,
                id2,
                question2
           FROM q,
                (SELECT @curRow := 0, @curType := '') r
          ORDER BY  id1, id2
        ) t
 WHERE rank = 1
结果

rank id1  id2
1    1123 2
1    2431 1231

所以这不是免费的编码服务。你必须自己尝试解决这个问题。如果你不能让它工作,张贴你尝试,我们将帮助你修复它。使用GROUP BY按这些列对数据进行分组,使用COUNT*计算组中的行数。当计数为1时,它是唯一的。所需的输出与描述不匹配。为什么输出中没有id1=1123,id2=3?这也是一个独特的组合。因为id1=1123当前已出现。问题是我不知道如何分别对两列使用distinct。GROUP BY id1,ID2您的示例中是否缺少一些数据?您的所有行在id1和id2中都是唯一的。
rank id1  id2
1    1123 2
1    2431 1231