我正在将sql存储过程转换为c#实体框架。我对c#很满意,但是sql对我来说还是很新的。在其中一个存储过程中,它以 select distinct
,然后选择一组表值并将其分配给变量。然后我们得到 from where
部分,其结构如下所示。
from
tableA
left outer join tableB on tableB.client = tableA.clientId
left outer join tableC tableCVar on tableC.client = tableA.clientId
left outer join tableD tableDVarX on tableD.client = tableA.cientId and tableD.ind = "X"
left outer join tableD tableDVarY on tableD.client = tableA.clientId and tableD.ind = "Y"
where tableB.client = @clientSSN and tableB.IdNumber = @tableBId and tableB.revisionNum = 1
END
问题:当sql的记录被删除时,sql如何知道从tablea中选择哪个记录 where
语句只查看与tableb相关的值?
我是否遗漏了sql的工作原理?我不明白这个查询如何知道哪个tablea记录是正确的。
2条答案
按热度按时间ulmd4ohb1#
WARE子句不仅限制应用条件的表,因为表是联接的,它实际上会过滤所有表行。
尝试了解联接的工作原理:https://www.dofactory.com/sql/join
9o685dep2#
意思是“从所有tablea行开始,然后连接所有匹配的tableb行,保留没有匹配tableb行的tablea行。没有匹配tableb行的tablea行对于联接结果中的所有tableb列都为空。
但是在tableb上放置where子句条件会过滤掉所有不匹配的tablea行。所以这就相当于一个内部连接。