sql-来自表-x,其中表-y.field=变量这是如何从table-x得到一个不同的记录的?

i2byvkas  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(344)

我正在将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记录是正确的。

ulmd4ohb

ulmd4ohb1#

WARE子句不仅限制应用条件的表,因为表是联接的,它实际上会过滤所有表行。
尝试了解联接的工作原理:https://www.dofactory.com/sql/join

9o685dep

9o685dep2#

from
tableA
left outer join tableB on tableB.client = tableA.clientId
where tableB.client = @clientSSN

意思是“从所有tablea行开始,然后连接所有匹配的tableb行,保留没有匹配tableb行的tablea行。没有匹配tableb行的tablea行对于联接结果中的所有tableb列都为空。
但是在tableb上放置where子句条件会过滤掉所有不匹配的tablea行。所以这就相当于一个内部连接。

from
tableA
inner join tableB on tableB.client = tableA.clientId
where tableB.client = @clientSSN

相关问题