我有两张表A和B如下。
A:
key type
0 t
1 f
2 t
3 f
4 t
5 t
.......
B:
key name
0 Mary
0 Tony
0 Krolik
1 Tom
2 Tony
3 Tony
3 Mary
3 Tom
4 Tony
4 Tim
5 Tim
5 Mary
5 Wuli
.....
我希望找到它的首字母名称是' f'。
例如,在A中,键1和键3的类型是' f',我们在表B中找到键1和3,有2' Tom'和1'玛丽'还有1' Tony'
1 Tom
3 Tony
3 Mary
3 Tom
如果n = 1并且表格像以前一样显示,我们希望得到汤姆'因为它的出现是前1。 如何编写sql语句来满足这些要求? 我写下面的东西,但这是错的。谁能帮我?我假设n = 20。
SELECT DISTINCT TOP 20 name
FROM B
WHERE key IN (
SELECT key
FROM A
WHERE "type" = 'f'
)
GROUP BY name
ORDER BY DESC;
答案 0 :(得分:0)
您似乎不需要汇总。 Postgres中的top
相当于limit
或fetch first <row> rows
:
SELECT name, key
FROM B
WHERE B.key IN (SELECT A.key
FROM A
WHERE "type" = 'f'
)
ORDER BY key;
这对应于问题中提供的结果。您的描述与这些结果并不完全匹配。