这个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
答案 0 :(得分:1)
您可以使用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)
上的索引(两个单独的索引)。
答案 1 :(得分:1)
一个选项是在avg
select语句中使用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.S。这样,无需显式编写id。