none
INCOMPRENSIBLE INSTRUCCION DE T-SQL RRS feed

  • Pregunta

  • Hola.

    Tras hacerme cargo de una BD SQL-Server 2008 R2, estoy revisando, entre otros objetos, las Vistas para ver de documentarlas y "entender" su funcionamiento, todo caso que no me han pasado casi información al respecto y algunas de ellas son complejísimas. Es asi que me encuentro la siguiente instrucción, repetida varias veces, en una u otra forma similar:

    Zona in (11) and Zona in (1,2,3,6,7,11,27,44)

    Como resultado me devuelve únicamente las filas de la Zona 11, aunque (lo poco que me han comentado) la intención es que lo haga de cualquiera contenida en la segunda lista IN. El caso es que dejándola como está me tarda unos 12 segundos, mientras que si elimino el primer IN se va a los casi 2 minutos. Entiendo que, por precedencia de operadores SQL, el primer IN "anula" al segundo. Como información adicional diré que las tablas involucradas en la vista solo contienen información de la Zona 11, aunque pudieran teneral de las otras. No obstante, ¿alguien se le ocurre el motivo de escribirla asi?

    Un saludo.

    viernes, 22 de julio de 2016 8:32

Respuestas

  • JAPlazasG,

    Tal y como muestras la expresión, no tiene sentido el operador IN de la primera condición ni mucho menos la segunda condición. La expresión resultará verdadera cuando un valor de la columna [Zona] sea igual a 11, en cualquier otro caso resultará falsa, por tanto, la expresión que muestras puedes simplificarla a:

    Zona = 11

    // ¿alguien se le ocurre el motivo de escribirla asi?

    En lo personal, pienso que no tiene un mínimo de sentido. La expresión es tan "inocente" que se me ocurre pensar que antes validaban por todas las zonas descritas en la segunda expresión y luego la restringieron a 11 y por "prevención" dejaron la segunda condición, quizá olvidaron comentarla.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta José De Alva viernes, 29 de julio de 2016 22:20
    viernes, 22 de julio de 2016 16:26
  • Hola,

    te puedes sorprender de lo que te encuentras por ahí en bbdd ajenas...en cuanto a lo que comentas yo lo veo claro, el segundo IN como te han dicho no tiene sentido y sinceramente tendría que darte lo mismo los motivos que llevaron a escribirla.

    Si el resultado de la sentencia es obtener los registros de zona de la Zona=11 no te compliques y quita la segunda parte.

    SalU2


    JMF

    • Marcado como respuesta José De Alva viernes, 29 de julio de 2016 22:20
    viernes, 22 de julio de 2016 17:25

Todas las respuestas

  • Hola,

          si la condición es así solo te devolverá las de Zona = 11 porque es la única condición que se cumple en ambos grupos.

         No sé cuántos registros tiene la vista ni qué tablas involucra pero si es algo que se usa con frecuencia entonces habría que ver analizar el plan de ejecución, ver si hay un índice por Zona, etc.


    Mauricio - Copenhague - Dinamarca

    viernes, 22 de julio de 2016 10:27
  • JAPlazasG,

    Tal y como muestras la expresión, no tiene sentido el operador IN de la primera condición ni mucho menos la segunda condición. La expresión resultará verdadera cuando un valor de la columna [Zona] sea igual a 11, en cualquier otro caso resultará falsa, por tanto, la expresión que muestras puedes simplificarla a:

    Zona = 11

    // ¿alguien se le ocurre el motivo de escribirla asi?

    En lo personal, pienso que no tiene un mínimo de sentido. La expresión es tan "inocente" que se me ocurre pensar que antes validaban por todas las zonas descritas en la segunda expresión y luego la restringieron a 11 y por "prevención" dejaron la segunda condición, quizá olvidaron comentarla.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta José De Alva viernes, 29 de julio de 2016 22:20
    viernes, 22 de julio de 2016 16:26
  • Hola,

    te puedes sorprender de lo que te encuentras por ahí en bbdd ajenas...en cuanto a lo que comentas yo lo veo claro, el segundo IN como te han dicho no tiene sentido y sinceramente tendría que darte lo mismo los motivos que llevaron a escribirla.

    Si el resultado de la sentencia es obtener los registros de zona de la Zona=11 no te compliques y quita la segunda parte.

    SalU2


    JMF

    • Marcado como respuesta José De Alva viernes, 29 de julio de 2016 22:20
    viernes, 22 de julio de 2016 17:25
  • Hola.

    Tal como habéis comentado es como le veía yo desde el primer momento. Pero como, coincido con vosotros, se ven "cosas" tan raras en algunas BBDD prefería compartirlo por si alguien le veía sentido. Habéis confirmado mi análisis.

    Gracias a todos.

    lunes, 25 de julio de 2016 13:20