选择具有多个不同列值组合的行

sme*_*lin 2 sql postgresql select postgresql-9.1

我有一个表3列:id,val1val2.

对于val2的每个不同值,我想选择存在多个不同val1值的所有行.

例:

| id | val1 | val2 |
|------------------|
| 1  | A1   |  a2  |
| 2  | A1   |  a2  |
| 3  | A1   |  b2  |
| 4  | B1   |  b2  |
| 5  | A1   |  c2  |
| 6  | A1   |  c2  |
| 7  | A1   |  c2  |
| 8  | A1   |  d2  |
| 9  | C1   |  d2  |
| 10 | A1   |  d2  |
Run Code Online (Sandbox Code Playgroud)

期望的结果:

| id | val1 | val2 |
|------------------|
| 3  | A1   |  b2  |
| 4  | B1   |  b2  |
| 8  | A1   |  d2  |
| 9  | C1   |  d2  |
| 10 | A1   |  d2  |
Run Code Online (Sandbox Code Playgroud)

我没有设法提出任何允许我这样做的查询,也许其他人对如何解决这个问题有了一个想法.

And*_*mar 6

您可以使用having子句搜索val2多个不同的值val1.例如:

select  yt.*
from    YourTable yt
join    (
        select  val2
        from    YourTable
        group by
                val2
        having  count(distinct val1) > 1
        ) as filter
on      yt.val2 = filter.val2
Run Code Online (Sandbox Code Playgroud)