我有这个可以工作的SQL代码:
from starlette.middleware.base import BaseHTTPMiddleware
class CheckApiKey(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
print("ok")
response = await call_next(request)
return response
有两个左联接和一个内联接。我知道如何进行内部联接,但不知道如何使两个左联接需要在第一个内部联接中获得ID。我正在做这样的事情:
SELECT
FF.numero,
FF.cuo_pla,
FF.num_pla,
PN.Descripcion,
TN.Nombre
FROM encf EF
JOIN forf FF
ON EF.numero = FF.numero
AND EF.[manual] = FF.[manual]
AND EF.comproba = FF.comproba
AND EF.tipo_fac = FF.tipo_fac
AND EF.sucursal = FF.sucursal
LEFT JOIN Planes PN
ON FF.num_pla = PN.Numero
LEFT JOIN Tarjetas TN
ON PN.IdTarjeta = TN.ID
WHERE
EF.documento = 123456789
内部联接的工作正常,但是我不知道如何翻译两个左联接,有什么建议吗?
答案 0 :(得分:1)
根据Microsoft documentation,查询将为:
var queryEncFor = (from enc in db.encf
join forF in db.forf on
new
{
enc.numero,
enc.manual,
enc.comproba,
enc.tipo_fac,
enc.sucursal
}
equals
new
{
forF.numero,
forF.manual,
forF.comproba,
forF.tipo_fac,
forF.sucursal
}
join plane in db.Planes on forF.num_pla equals plane.Numero into leftedPlanes
from leftedPlane in leftedPlanes.DefaultIfEmpty()
join tarjeta in db.Tarjetas on leftedPlane?.IdTarjeta equals tarjeta.ID into leftedTarjetas
from leftedTarjeta in leftedTarjetas.DefaultIfEmpty()
where enc.documento == 1
select new UnionEncForFact
{
numero = enc.numero,
cuo_pla = forF.cuo_pla == null ? 0 : forF.cuo_pla.Value,
num_pla = forF.num_pla,
Descripcion = leftedPlane?.Descripcion,
Nombre = leftedTarjeta?.Nombre ?? 0
}).ToList();
希望您对此有帮助。