2

id、、の3つの列を持つテーブルがval1ありval2ます。

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  |

望ましい結果:

| id | val1 | val2 |
|------------------|
| 3  | A1   |  b2  |
| 4  | B1   |  b2  |
| 8  | A1   |  d2  |
| 9  | C1   |  d2  |
| 10 | A1   |  d2  |

私はこれを可能にするクエリを思い付くことができませんでした。おそらく他の誰かがこれを解決する方法についてアイデアを持っています。

4

4 に答える 4

6

句を使用して、の複数の異なる値でhaving検索できます。例えば:val2val1

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
于 2012-05-25T10:27:14.523 に答える
2
SELECT * 
FROM   TABLE_2 
WHERE  EXISTS (SELECT 1 
               FROM   (SELECT val2, 
                              val1, 
                              Count(*) AS Number 
                       FROM   TABLE_2 
                       GROUP  BY val2, 
                                 val1 
                       HAVING Count(*) = 1) a 
               WHERE  TABLE_2.val2 = a.val2) 
ORDER  BY ID 
于 2012-05-25T10:24:40.950 に答える
2

このクエリを試してください:

SELECT * from tbl where val2 in (SELECT  val2 FROM `tbl`  group by val2 having  
 count(distinct(val1)) > 1)
于 2012-05-25T11:02:45.537 に答える
2

集約ウィンドウ関数を使用すると、次のようにすることもできます。

SELECT
  id,
  val1,
  val2
FROM (
  SELECT
    *,
    MIN(val1) OVER (PARTITION BY val2) AS minval1,
    MAX(val1) OVER (PARTITION BY val2) AS maxval1
  FROM atable
) s
WHERE minval1 <> maxval1
于 2012-05-25T13:15:53.830 に答える