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

piah890a  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(330)

我对这个sql查询非常感兴趣。
我需要得到一个表中所有不同的单词,其中元素的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

kninwzqo

kninwzqo1#

一种选择是使用 avg 以及 sum 聚合函数 grouping 选择包含 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、 这样,就不需要显式地编写id。

6vl6ewon

6vl6ewon2#

你可以用 group by 以及 having :

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) (两个单独的索引)。

相关问题