SQL查询以获取表中所有相关ID位于数组中的所有不同单词

时间:2018-11-08 20:57:11

标签: mysql sql

这个SQL查询让我头疼。

我需要获取element_id在数组中的表中的所有不同单词。

 word | element_id
------+-----------
 cat  | 1 
 dog  | 1 
 cat  | 2 
 dog  | 2 
 rat  | 1 
 rat  | 3 

我想找到element_id分别为1和2的所有单词。

在这种情况下,我想退回,但不退还老鼠

我尝试了此操作,但没有用。

select distinct word from words where element_id = 1 and element_id = 2

2 个答案:

答案 0 :(得分:1)

您可以使用group byhaving

select word
from words
where element_id in (1, 2)
group by word
having count(*) = 2;

这假定您的表没有重复的行。

如果性能是一个问题,那么:

select w.word
from words w
where w.element_id = 1 and
      exists (select 1 from words w2 where w2.word = w.word and w2.element_id = 2);

这可以利用words(word, element_id)words(element_id)上的索引(两个单独的索引)。

答案 1 :(得分:1)

一个选项是在avg select语句中使用sumgrouping聚合函数,该语句包含having子句,

select word
  from words
 group by word
having avg(nvl(element_id,0)) = 1.5 and sum(nvl(element_id,0)) = 3;

假设element_id是可为空的整数列。

select word
  from words
 group by word
having avg(element_id) = 1.5 and sum(element_id) = 3;

因为element_id是不可为空的整数列。

P.S。这样,无需显式编写id。