gpt4 book ai didi

基于尚未匹配的第一个匹配项的出现顺序的 SQL 连接

转载 作者:行者123 更新时间:2023-12-04 09:25:43 25 4
gpt4 key购买 nike

假设我有 2 个表 - 表 1 和表 2:
enter image description here enter image description here
我希望能够按照两个表的显示顺序向下排列并且匹配而不会重复。所以对于这个例子:

  • 查看表 1,ID 1 并与表 2 匹配的第一种类型匹配。在这种情况下,表 1 中 ID 1 的类型为 A。因此,在表 2 中,按照它出现的顺序查看,并获得第一种颜色具有尚未匹配的类型 A。在这种情况下,这将是“红色”
  • 查看表 1,ID 2 并匹配第一个类型与表 2 匹配。在这种情况下,在表 1 中为 ID 2 键入 B。因此在表 2 中,按照它出现的顺序查看,并获得第一个颜色具有尚未匹配的类型 B。在这种情况下,这将是“绿色”
  • 查看表 1,ID 3 并匹配与表 2 匹配的第一个类型。在这种情况下,表 1 中 ID 3 的类型再次为 A。因此,在表 2 中,按照显示的顺序查看,并获取尚未匹配的具有类型 A 的第一种颜色。在这种情况下,这将是“黄色”
  • 查看表 1,ID 4 并与表 2 匹配的第一种类型匹配。在这种情况下,表 1 中 ID 4 的类型为 C。因此在表 2 中按其出现的顺序查看,并获得第一种颜色具有尚未匹配的类型 C。在这种情况下,这将是“蓝色”
  • 查看表 1,ID 5 并匹配与表 2 匹配的第一个类型。在这种情况下,表 1 中 ID 5 的类型再次为 B。因此,在表 2 中,按照显示的顺序查看,并获取尚未匹配的具有类型 B 的第一种颜色。在这种情况下,所有类型 B 都已匹配,因此返回 "Null"

  • 所以结果表看起来像这样:
    enter image description here
    如何做到这一点是 SQL?有没有一种“加入”可以做到这一点?是否可以在 SQL 中使用 for 循环,您可以在其中找到表 2 中的匹配项并及时从表 2 中删除该实例以进行下一次循环迭代?

    最佳答案

    使用行号:

    select t1.*, t2.*
    from (select t1.*, row_number() over (partition by type order by id) as seqnum
    from table1 t1
    ) t1 left join
    (select t2.*, row_number() over (partition by type order by (select null)) as seqnum
    from table1 t2
    ) t2
    on t1.type = t2.type and t1.seqnum = t2.seqnum;
    请注意,SQL 表表示无序集。您在 table2 中没有明显的排序,因此在结果中不保证排序。

    关于基于尚未匹配的第一个匹配项的出现顺序的 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63021671/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com