我在一本书中有一张包含所有单词位置的表格 这个表是这样的
Word PageNo Position
----------------------
A 1 10
A 1 15
B 1 13
B 2 18
C 2 20
我想找到包含单词A和单词B的页面
结果是第1页
我可以通过此查询获得答案
select PageNo from
(select * from t where word = 'A') a inner join
(select * from t where word = 'B') b on a.PageNo = b.PageNo
但我真正想要的是这个
Word PageNo Position
----------------------
A 1 10
A 1 15
B 1 13
我想要所有具有pageno =的行(具有A和B的页面)
如果我使用此查询
select * from
(select * from t where word = 'A') a inner join
(select * from t where word = 'B') b on a.PageNo = b.PageNo
这是结果
Word PageNo Position Word PageNo Position
------------------------------------------------------
A 1 10 B 1 13
A 1 15 B 1 13
当我加入两个列表并选择所有列时,会显示六列
但我想要三个联合两个列的列
有没有办法可以加入两个列表并联合列表?
我可以选择两个,但我想要一个。
答案 0 :(得分:2)
试试这个:
SELECT Word, PageNo, Position
FROM t
WHERE PageNo IN (SELECT PageNo
FROM t
WHERE word IN ('A', 'B')
GROUP BY PageNo
HAVING COUNT(DISTINCT word) = 2)
答案 1 :(得分:2)
select * from tablename
where PageNo in
(select PageNo
from tablename
where Word in ('A','B')
group by PageNo
having count(distinct Word) >= 2)
答案 2 :(得分:0)
如果是Oracle - 您可以使用INTERSECT
答案 3 :(得分:0)
您也可以使用EXISTS()
SELECT *
FROM YourTable t
WHERE EXISTS(SELECT 1
FROM YourTable s
WHERE s.word IN ('A', 'B')
AND t.pageno = s.pageno
GROUP BY s.PageNo
HAVING COUNT(DISTINCT s.word) = 2)