DB2 仅获取前 x 行

问题描述 投票:0回答:2

我想要

fetch first x rows only
通过 IDENTIFIER 列。 但是当我加入缩写表时,它的结果会相乘,因为每个标识符可能有多个结果。

我怎么说,

fetching first x rows
仅引用标识符?

SELECT IDENTIFIER, ABBREV
FROM TABLE_A taba
JOIN ABBREV abbrev ON abbrev.tablea_IDENTIFIER = taba.IDENTIFIER
FETCH FIRST 2 ROWS ONLY

表_A

标识符
1
2

表_abb

缩写 表a_标识符
'A' 1
'B' 1
'C' 1
'A' 2

结果应该是

缩写 标识符
'A' 1
'B' 1
'C' 1
'A' 2
sql db2
2个回答
0
投票

解决问题的一个简单方法是运行如下查询:

select a.id, a.a
from abbrev a
where a.id in (select id from id)

您只能从 abbrev 中选择在另一个(标识符/table_a)表中具有 ID 的记录。您可以向其中添加 FETCH FIRST 子句。你所做的更像是笛卡尔积(查一下)。


0
投票

以上来自@data_henrik 的想法很好。 您还可以通过计算与标识符进行内部连接后的行数来解决您的问题。类似的事情,在你的例子中,在带有标识符的表缩写内部之后,它给出了 4 行(就像总计数值)

db<>小提琴

WITH 
    A (Identifier) AS (VALUES 1, 2),
    B (abbrev, tablea_identifier) AS (VALUES 
        ('A', 1),
        ('B', 1),
        ('C', 1),
        ('A', 2)),
    C AS (SELECT count(tablea_identifier) AS count_value FROM B)


SELECT main_1.abbrev, main_1.tablea_identifier FROM (
SELECT B.*, C.* FROM B, C
INNER JOIN A ON A.Identifier = B.tablea_identifier
) AS main_1
WHERE count_value = 4

输出:


#|ABBREV|TABLEA_IDENTIFIER|
-+------+-----------------+
1|A     |                1|
2|B     |                1|
3|C     |                1|
4|A     |                2|



© www.soinside.com 2019 - 2024. All rights reserved.