【问题标题】:Is there way to add a field in a parent query that will increment as the query goes through all values generated in a subquery?有没有办法在父查询中添加一个字段,该字段将随着查询遍历子查询中生成的所有值而增加?
【发布时间】:2021-05-13 17:37:59
【问题描述】:

我认为我的表缺少真正的主键,我需要在输出中创建一个。我无法修改表格。

我需要运行一个选择查询来生成一个值列表 (list_A),然后获取这些值并查询它们以显示与它们相关的所有记录。从这些记录中,我执行另一个选择以提取一个现在可见的名为 list_B 的列表。从 list_B 中,我可以搜索它们以显示与原始列表 (list_A) 相关的所有记录,其中许多记录缺少 list_A 中的值但仍需要计数。

到目前为止,这是我的过程:

  1. 我声明了一个名为“temp_key”的序列,它从 1 开始并以 1 递增。
  2. 我向父查询添加了一个名为“temp_key”的字段,以便它有望显示结果记录与原始 list_A 子查询的哪个元素相关。
  3. 我遇到了麻烦,因为我不知道如何在 list_A 子查询从列表中所有值的开头到结尾移动时使 temp_key 递增。
SELECT currval(temp_key) AS temp_key, list_A, list_B 
FROM table 
WHERE list_B IN (SELECT DISTINCT list_B 
                 FROM table 
                 WHERE list_A IN (SELECT DISTINCT list_A 
                                  from table);

现在,上述查询不起作用,因为似乎没有办法使 temp_key 的当前值向上递增,因为它遍历最初从最低级别子查询生成的列表中的值 (list_A )。

例如,list_A 中可能只有 10 个值。并且输出可能有 100 条记录,全部标记为 1 到 10,其中许多值在 list_A 字段中缺失值。但是它们仍然需要标记为 1 到 10,因为 list_B 的值连接了这两个集合。

【问题讨论】:

  • 对不起,我不明白(并且将 column 称为“列表”也无济于事)。您能否edit 提出您的问题(通过单击其下方的edit 链接)并添加一些示例数据和基于该数据的预期输出为formatted text?请参阅here,了解有关如何创建漂亮的文本表格的一些提示。 (请edit您的问题 - 请不要将代码或其他信息放入 cmets)

标签: sql postgresql nextval currval


【解决方案1】:

也许您可以先使用以下代码创建一个新的主键列(将行号与 list_a 连接):

WITH T AS (
        SELECT currval(temp_key) AS temp_key, list_A, list_B, 

        CONCAT(ROW_NUMBER() OVER(PARTITION BY list_A ORDER BY list_B),list_A) AS Prim_Key  
        FROM table )

SELECT * fROM T

然后您可以在 where 子句中指定要选择的键

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多