简体   繁体   中英

How to select columns with subset of another column in mysql?

I have a complicated version of this problem ( How to select columns with same set of values in mysql? ) to deal with.

In a relation R(A,B,C), The problem is to figure out "A's with 4 or more common B's" . FYI: "AB" is a candidate key.

All I was able to do is this

Query:

select * from 
(select A, group_concat (B separator ', ') all_b's from R group by A having
(count(B))>3) p1  
join  
(select A, group_concat (B separator ', ') all_b's from R group by A having
(count(B))>3) p2  
on p1.all_b's = p2.all_b's and p1.A <> p2.A; 

Output:

Null Set

But, the answer is supposed to be something else. Any idea how to deal with this?

Sample Data:

A   B   C
a1  b1  asdas  
a1  b2  sdvsd    
a1  b3  sdfs  
a1  b4  evevr  
a2  b1  jdjd  
a2  b2  dkjlfnv  
a2  b3  sdfs  
a2  b4  evevr  
a2  b5  adfgaf  
a3  b1  sdfsdf  

Expected Output

A   A  count
a1  a2  4

It should be something like that:

SELECT
    first.A AS first_A,
    second.A AS second_A,
    COUNT(*) AS countSameBs
FROM
    R first
JOIN
    R second ON
    first.B = second.B AND
    first.A != second.A
GROUP BY
    first_A, second_A
HAVING
    countSameBs >= 4 AND
    first_A < second_A

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM