我有两张桌子,比如说dt1和dt2 我想在dt1中找到数据但在dt2中根据某些列不匹配。(动态)
我想出的方法是将两个表连接起来,找到那些列为空值的列 但问题是我如何使用动态列号加入它们 例如,如果最初我想通过N列连接它们,但是如果dt2中的1列为空或为null,那么我想通过剩余的N-1列将它们连接起来。
例如:
DT1:
update: function(req, res) {
User.update(req.body).exec(function(err, result){
if (err) {
// ups
}
return res.redirect('/something-after')
});
}
DT2:
ColA, ColB, ColC, ColD
1A 1B 1C 1D
2A 2B 2C 2D
3A 3B 3C 3D
4A 4B 4C 4D
ColAA ColBB ColCC, ColE
1A 1B null 1E
2A 2X null 2E
3A 3B 3C 3E
null null 4C 4E
如果其中一个为null,则加入其余列。
预期结果:
dt1 left join dt2 by ColA=ColAA, ColB=ColBB and ColC=ColCC
ColE中具有空值的数据是我想要的。(2A,2B,2C,2D,null)
现在我只能通过固定列加入它们,我怎样才能实现上面的场景。
非常感谢。
答案 0 :(得分:1)
请参阅https://msdn.microsoft.com/en-us/library/bb882533.aspx。
这听起来像你想要的:
from d1 in dt1
from d2 in dt2
where (d1.ColA==d2.ColAA or d2.ColAA == null) and
(d1.ColB==d2.ColBB or d2.ColBB == null) and
(d1.ColC==d2.ColCC or d2.ColCC == null)
select new { ..... };
我不确定您的问题是否这正是您想要的查询,您可能希望添加例如and (d1.ColA==d2.ColAA or d1.ColB==d2.ColBB or d1.ColC==d2.ColCC)
,以便他们无法链接所有空值