SQL:一旦被另一列分区,则从非唯一列值中选择行

时间:2019-06-24 21:10:47

标签: sql

在此处使用SQL。尝试选择该特定分区内列值唯一的所有行。

尝试过:

 select * 
   from dataTable 
  where value in ( select value 
                     from dataTable 
                    group by tv_id, value 
                   having count(*) > 1)

但是它返回了完整的表-我认为问题在于许多tv_id的值相同并且重叠。

我所拥有的:

tv_id value 1 1 1 2 1 2 1 3 2 1 2 1 2 2 2 3 2 4 3 1 3 1 3 2

我想要什么:

tv_id value 1 2 1 2 2 1 2 1 3 1 3 1

我有一堆tv_id,从本质上讲,我只希望每个tv_id中值不是唯一的行。 例如:我不要tv_id,值:3、2,因为它是数据中的唯一组合。

谢谢!

1 个答案:

答案 0 :(得分:1)

也许这样的事情可以解决问题

Oracle Option

我包括此oracle版本,因为它使您可以更好地了解要查询的内容。

When a call (in thread) returns from locking the mutex, 
then check 
    if the value in the global variable is for 'this' thread.
    then  
        process the thread activities,  
        increment the global variable,
    endif 
endif
unlock the mutex
call nanosleep() to delay for a while to allow other threads to run

SQL

但这是一个标准的sql版本,几乎可以与任何数据库引擎一起使用

select tv_id, value  
from dataTable
where (tv_id, value)  in (
  select tv_id, value
  from dataTable
  group by tv_id, value
  having count(1) > 1
)

您需要查询同一张表两次,因为select tv_id, value from dataTable d1 join ( select tv_id, value from dataTable group by tv_id, value having count(1) > 1 ) d2 on d1.tv_id=d2.tv_id and d1.value=d2.value 在数据中产生了group by,因此您不会像预期输出中那样检索重复的行。