-1
从测试中选择*;
 一个 | b
---+---
 1 | 5
 4 | 1
 2 | 5
 3 | 3
 1 | 1
(5 行)

我如何编写这样的查询,所以“a”列中的所有输出值都是不同的,“b”列中的所有输出值也是不同的。

因此,例如,上述查询的有效结果集是:

1 | 5
 4 | 1
 3 | 3

下一个也是有效的:

4 | 1
 2 | 5
 3 | 3

最好找到尽可能多的结果,但这不是必需的。
最好的方法是什么?

谢谢。

4

2 回答 2

1

自己找到解决方案!:)

a) 将 id 列添加到“test”表
b) sql 查询:

和
    t1 AS (SELECT a, MIN(id) as id FROM test GROUP BY a),
    t2 AS (SELECT b, MIN(id) as id FROM test GROUP BY b)
    从测试中选择 *
    id 在哪里(从 t1 选择 id)和 id 在(从 t2 选择 id);

结果:

编号 | 一个 | b
----+---+---
  6 | 1 | 5
  7 | 4 | 1
  9 | 3 | 3
于 2012-10-13T20:22:46.697 回答
1

我认为这也应该给你正确的输出: SELECT a, MIN(b) as b FROM test GROUP BY a Intersect SELECT min(a) as a, b FROM test GROUP BY b;

编辑:试试这个:

Select MIN(t1.a), t1.b from (SELECT a, MIN(b) as b FROM test GROUP BY a) t1 GROUP BY t1.b
于 2012-10-13T20:30:30.860 回答