Principales respuestas
Case Inner Join ?

Pregunta
-
Estimados.
Tengo una tabla que no esta normalizada
Tengo:
Select * From A Inner Join B
On a.id=b.id
Y
Select * From A Inner Join B
On a.id=b.id_new
En la tabla A tengo una columna que me indica cuando cruzar por ID y cuadno por ID_NEW
Es posible hacer un case con el Innr Join ? algo como esto ?
Select * From A Inner Join B
Case Then A.col='A' Then cruzar por b.id
Then a.col='B' Then cruzar por b.id_new
DBA SQL Server Santiago/Chile
Respuestas
-
SELECT * From A Inner Join B ON A.id= CASE WHEN A.col='A' THEN = b.id WHEN A.col='B' THEN = b.id_new END
Buenas noches, no comprobe la sintaxis porque estoy desde el telf, pero prueba esto... y dime si te sirve.SQL ADICTO Queriendo aprender cada día mas...
- Propuesto como respuesta charles_sv viernes, 4 de marzo de 2016 0:31
- Marcado como respuesta CMAPM viernes, 4 de marzo de 2016 14:26
Todas las respuestas
-
SELECT * From A Inner Join B ON A.id= CASE WHEN A.col='A' THEN = b.id WHEN A.col='B' THEN = b.id_new END
Buenas noches, no comprobe la sintaxis porque estoy desde el telf, pero prueba esto... y dime si te sirve.SQL ADICTO Queriendo aprender cada día mas...
- Propuesto como respuesta charles_sv viernes, 4 de marzo de 2016 0:31
- Marcado como respuesta CMAPM viernes, 4 de marzo de 2016 14:26
-
Esta sugerencia pudiera resolver el problema, pero me gustaria ver el plan de ejecucion final. Anticipo que ambas tablas seran recorridas en su totalidad.
Otra forma seria:
select * from A inner join B on A.id = B.id where A.col='A'
union all
select * from A inner join B on A.id = B.id_new where A.col='B';AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas -
Intenté citar el mensaje anterior pero no me lo permiten aun porque no han podido comprobar mi cuenta jejeje
Solo quería decir que estoy totalmente de acuerdo con Hunchback. Sólo el plan de ejecución puede decirnos que tan eficiente es la consulta inicial planteada, en lo personal, creo que me iría por esta ultima que tú has posteado, la del UNION. Ya que con el WHERE desde un inicio ya le estas diciendo con cuales se hará el amarre en el JOIN, sin embargo en la primera opción planteada el motor de la base debe de perder tiempo en evaluar primero con la sentencia CASE si el campo es A o B y hasta despues hacer el JOIN.
Si tu tabla no tiene muchos registros o tu servidor es un monstruo de servidor probablemente no notes la diferencia de las dos sentencias; pero nunca está demás buscar optimizar las consultas.
Saludos
-