在SQL中的另一列中使用指定的公共值提取元组

Pri*_*kar 9 mysql r

我有一个看起来像这样的数据集:

 Col1    Col2    
 1        ABC 
 2        DEF
 3        ABC 
 1        DEF 
Run Code Online (Sandbox Code Playgroud)

预期产量:

Col1     Col2    
 1        ABC 
 1        DEF
Run Code Online (Sandbox Code Playgroud)

我想只从Col1中提取那些同时具有值ABCDEF列的IDS .

self-join在SQL中尝试了但是没有给我预期的结果.

SELECT DISTINCT Col1
FROM db A, db B
WHERE A.ID <> B.ID
    AND A.Col2 = 'ABC'
    AND B.Col2 = 'DEF' 
GROUP BY A.Col1
Run Code Online (Sandbox Code Playgroud)

另外,我在R中使用以下代码尝试了同样的事情:

vc <- c("ABC", "DEF")
data1 <- db[db$Col2 %in% vc,]
Run Code Online (Sandbox Code Playgroud)

再一次,我没有得到所需的输出.感谢所有指针提前.

Ron*_*hah 6

在R中,你可以做到

library(dplyr) 
df %>% 
   group_by(Col1) %>% 
   filter(all(vc %in% Col2))

#   Col1 Col2 
#  <int> <fct>
#1     1 ABC  
#2     1 DEF  
Run Code Online (Sandbox Code Playgroud)

基准R相当于

df[as.logical(with(df, ave(Col2, Col1, FUN = function(x) all(vc %in% x)))), ]

#  Col1 Col2
#1    1  ABC
#4    1  DEF
Run Code Online (Sandbox Code Playgroud)

我们选择包含所有内容的组vc.


Tim*_*sen 5

这是您当前的查询更正:

SELECT DISTINCT t1.Col1
FROM yourTable t1
INNER JOIN yourTable t2
    ON t1.Col1 = t2.Col1
WHERE t1.Col2 = 'ABC' AND t2.Col2 = 'DEF';
Run Code Online (Sandbox Code Playgroud)

演示

连接条件是两个Col1值都相同,第一个Col2值是ABC,第二个Col2值是DEF.

但是,我可能会使用以下规范方法:

SELECT Col1
FROM yourTable
WHERE Col2 IN ('ABC', 'DEF')
GROUP BY Col1
HAVING MIN(Col2) <> MAX(Col2);
Run Code Online (Sandbox Code Playgroud)