【问题标题】:Concatenate to create Unique ID and Check in another table连接以创建唯一 ID 并签入另一个表
【发布时间】:2018-12-14 04:43:57
【问题描述】:

朋友们, 我正在寻找一个有两个表(Tab1 和 Tab2)的解决方案。两者都有相同的字段(F1,F2,F3,F4)。如果我连接 F2、F3、F4,我会得到一个唯一的记录。 Tab1(Source) 有 10 条记录,Tab2(Dest) 有 2 条记录。 我想在 Source Tab 中创建一个唯一的 id 并在 Dest Tab 中执行相同的操作,稍后检查 Dest Tab 中哪些记录不可用并添加它。 因此,如果 Tab2 没有这些记录,记录将从 Tab1 移动到 Tab2。 让我知道如何实现它。

问候, 维克

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    如果我理解正确,则没有理由连接这些字段。您可以在where 标准(或join 标准)中使用它们。

    这是一个使用not exists的选项:

    insert into tab2 (f1,f2,f3,f4)
    select f1,f2,f3,f4
    from tab1 t1
    where not exists (
        select 1
        from tab2 t2
        where t1.f2 = t2.f2 and t1.f3 = t2.f3 and t1.f4 = t2.f4
        )
    

    这将基于f2, f3, and f4tab1 中不存在的tab2 中的任何数据插入tab2

    【讨论】:

    • 我将 insert into tab2 (f1,f2,f3,f4) select f1,f2,f3,f4 替换为 insert into tab2 select * from tab1,你能告诉我什么是 select 1
    • @Vik -- 这没什么,可以说是select 最简单的事情。使用exists 时,您不必select 任何字段,它只是试图根据where 标准查看是否匹配。所以select 1 只是一种快速的方法。例如,它与select f1 相同......
    • @sgeddes--非常感谢您回答我的问题。它运行良好。
    • 如果我有另一个字段 f5(date) 并且有多个 f2、f3、f4 条目,我将如何只选择最小日期行?
    • @Vik 我建议使用示例数据和预期结果提出一个新问题,而不是评论旧问题。此外,如果这回答了您最初的问题,您应该点击旁边的复选框接受它。
    【解决方案2】:

    使用左连接,从table1中取出table2中没有匹配行的所有行:

    insert into table2 (f1, f2, f3, f4)
    select t1.f1, t1.f2, t1.f3, t1.f4
    from table1 t1
    left join table2 t2
    on t1.f2 = t2.f2 and t1.f3 = t2.f3 and t1.f4 = t2.f4
    where t2.f2 is null and t2.f3 is null and t2.f4 is null
    

    【讨论】:

    • @forpas--感谢您提出另一种解决方案。让我也试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2022-01-06
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多