Quiero poder unir dos tablas internas en función del resultado de una expresión.Conditional Inner Join
lo que he estado tratando hasta ahora:
INNER JOIN CASE WHEN RegT.Type = 1 THEN TimeRegistration ELSE DrivingRegistration AS RReg
ON
RReg.RegistreringsId = R.Id
REGT es una unión que hice justo antes de esta unión:
INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
Este-secuencia de comandos SQL no funciona.
Así que, en total, si el Type
es 1, entonces debe unirse a la tabla TimeRegistration
si no debería unirse en DrivingRegistration
.
Solución:
En mi instrucción de selección que realizan las siguientes uniones:
INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
LEFT OUTER JOIN TimeRegistration AS TReg ON TReg.RegistreringsId = R.Id AND RegT.Type = 1
LEFT OUTER JOIN DrivingRegistration AS DReg ON DReg.RegistreringsId = R.Id AND RegT.Type <>1
Entonces editado mi where-clause
para emitir la correcta, dependiendo de la RegType
, así:
WHERE (CASE RegT.Type WHEN 1 THEN TReg.RegistreringsId ELSE DReg.RegistreringsId END = R.Id)
¡No puedes hacerlo así! 'CASE' no se puede usar para intercambiar dinámicamente partes aleatorias de la consulta. ¿Estas tablas tienen las mismas estructuras? –
¿Aparece un error? Si es así, ¿qué es? – AndrewC