若要显示重复值的集合,即另一个表中的另一个对应属性为NOT NULL

时间:2018-11-17 04:44:36

标签: mysql sql

不确定我是否在标题中清楚地描述了上下文 但是情况有两个表

A|B 
1|1 
1|2 
2|3 
2|4 
3|5 
4|6
5|7 
5|8 

B|C
1|NULL
2|1
3|NULL
4|NULL
5|NULL
6|2
7|3
8|4

输出的条件是A的值应出现1次以上, 而对应的B值在C中并非都为NULL(来自B的至少C的值不是NULL)

与上表匹配的条件应为A的1和5 重复A的计数的预期输出为2

2 个答案:

答案 0 :(得分:1)

以下内容应有帮助。

select t.a,count(t.a),count(t2.c)
 from t
 join t2
   on t.b=t2.b
group by t.a
having count(t.a)>1
   and count(t2.c)>=1

在这里我将表t和t2合并到列b 之后,我检查表t中有多少记录col-a大于1,以及t2中的col c有多少记录>。

仅供参考,count(null)为零),因此t2.c中的任何非null值都将具有count(t2.c)> = 1

完整演示

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6d56b0ed8bafe09786342a6bfb58b8d2

答案 1 :(得分:0)

您可以尝试使用存在

select t1.A,count(*) as duplicate
     from tableA t1

    where exists ( select 1 from tableB t2 where t2.B=t1.B
                                           and COALESCE(t2.B,t2.c) is not null
                 )
    group by t1.A
    having count(*)>1