You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询TA与TB中主键相同但属性值不同的记录(SQL/Linq实现)

查找影子表与原表的差异记录

SQL 实现

通过**内连接(INNER JOIN)**关联两张表的主键,再筛选属性值不一致的记录即可:

SELECT TA.*
FROM TA
INNER JOIN TB ON TA.PK = TB.PK
WHERE TA.Value1 != TB.Value1 
   OR TA.Value2 != TB.Value2;

如果需要同时查看两张表的对比数据,可调整返回字段:

SELECT TA.PK, 
       TA.Value1 AS TA_Value1, TB.Value1 AS TB_Value1,
       TA.Value2 AS TA_Value2, TB.Value2 AS TB_Value2
FROM TA
INNER JOIN TB ON TA.PK = TB.PK
WHERE TA.Value1 != TB.Value1 
   OR TA.Value2 != TB.Value2;

LINQ(EF Core/EF)实现

假设你的DbContext中定义了DbSet<MyData> TA和DbSet<MyData> TB,提供两种实现方式:

方式1:使用Join关联筛选

var changedRecords = from ta in context.TA
                     join tb in context.TB on ta.PK equals tb.PK
                     where ta.Value1 != tb.Value1 || ta.Value2 != tb.Value2
                     select ta;

方式2:使用Where+Any匹配主键并判断差异

var changedRecords = context.TA
    .Where(ta => context.TB.Any(tb => 
        tb.PK == ta.PK && 
        (tb.Value1 != ta.Value1 || tb.Value2 != ta.Value2)));

若需要获取两张表的对比详情,可返回自定义匿名类型:

var changedDetails = from ta in context.TA
                     join tb in context.TB on ta.PK equals tb.PK
                     where ta.Value1 != tb.Value1 || ta.Value2 != tb.Value2
                     select new 
                     {
                         PK = ta.PK,
                         TA_Value1 = ta.Value1,
                         TB_Value1 = tb.Value1,
                         TA_Value2 = ta.Value2,
                         TB_Value2 = tb.Value2
                     };

内容的提问来源于stack exchange,提问作者Razzupaltuff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:05:35