我想要
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 |
解决问题的一个简单方法是运行如下查询:
select a.id, a.a
from abbrev a
where a.id in (select id from id)
您只能从 abbrev 中选择在另一个(标识符/table_a)表中具有 ID 的记录。您可以向其中添加 FETCH FIRST 子句。你所做的更像是笛卡尔积(查一下)。
以上来自@data_henrik 的想法很好。 您还可以通过计算与标识符进行内部连接后的行数来解决您的问题。类似的事情,在你的例子中,在带有标识符的表缩写内部之后,它给出了 4 行(就像总计数值)
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|