Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[SOLUCIONADO]  Duda sobre SELECT UNION
#1

Hola

Esta pregunta es para todo aquel que tenga muy claro el comportamiento de SELECT UNION en mi caso en el motor SQLite3.

Caso a describir:
Hago un SELECT donde pongo la columna Fecha A y Fecha B donde Fecha B no tiene por que estar rellena y cuando no esta rellena tiene un "-" para distinguir el campo vacío.
Dicho esto, sería:

SQL
  1. 1er. SELECT
  2. SELECT FechaA, FechaB
  3. FROM (SELECT FechaA, FechaB FROM TA UNION SELECT FechaA, FechaB FROM TA ORDER BY FechaB)
  4. WHERE FechaB<>'-'
  5. UNION
  6. 2º SELECT
  7. SELECT FechaA, FechaB
  8. FROM (SELECT FechaA, FechaB FROM TA UNION SELECT FechaA, FechaB FROM TA ORDER BY FechaA)
  9. WHERE FechaB='-';




Yo pensaba para el caso descrito:
Que los datos del primer select se cargarían en el result primero y tras él, el segundo select se cargaría a continuación, pero en mis pruebas se mezclan

Alguien sabe cual es la razón.

En definitiva, yo se que con una vista podría resolver mi duda, pero alguien sabe la razón de si no ordeno nada en el union principal, por que no toma mi lógica descrita.

Gracias.
    ¡Gracias!
#2

Nunca he necesitado utilizar la cláusula Union, así que no te puedo responder pero sí te digo que Union relaciona registros enteros. Para relacionar columnas se debe utilizar join (left join o inner join).

Saludos.

No podemos regresar
    ¡Gracias!
#3

Shordi, Shordi, Gracias pero me temo que estas mas perdido que el barco del arroz en el triangulo de las bermudas Smile

Creo que no has entendido nada, pero, no importa.

Tras revisar el problema, he observado que en SELECT Union, uses o no, ORDER BY, el ordena de forma predeterminada siempre que el usuario no diga lo contrario por la columna primera que se encuentre y es lo que hace este SELECT UNION que propongo, por eso, siempre me baraja los datos este de acuerdo yo o no.

Estoy pendiente de comprobar la documentación de SELECT UNION pero me temo que cuando un usuario no especifica el ORDER BY de salida de los datos, UNION asume, que debe ordenar por la columna primera. Cosa que para mi, en mi opinión personal es una autentica CAGADA, con perdón si es parte de la norma, ya que esto hace que no podamos hacer justo el SELECT UNION que yo había pensado como totalmente lógico, pero, yo no he realizado el estándar SQL bajo SQLite3.

Saludos

==============Solucionado=========================

Tras seguir investigando, la solución es que en vez de poner UNION hay que poner UNION ALL y en las UNION interiores al UNION ALL debe ser ordenado según el siguiente criterio, debes poner el SELECT UNION interior que deseas que se cargue primero en la primera posición y así sucesivamente como si de una carga de datos en fila se tratara.
    ¡Gracias!
#4

(19-05-2022, 11:07)gambafeliz escribió:  Shordi, Shordi, Gracias pero me temo que estas mas perdido que el barco del arroz en el triangulo de las bermudas Smile

Creo que no has entendido nada, pero, no importa.
...
Llevas razón. Ni he entendido ni escarmentado. Tendré que ponerle remedio.

Saludos.

No podemos regresar
    ¡Gracias!
#5

(19-05-2022, 13:39)Shordi escribió:  Llevas razón. Ni he entendido ni escarmentado. Tendré que ponerle remedio.

Oye, Shordi esto no debo entenderlo como que te has enfadado ni nada por mi comentario, ¿no? por que sinceramente yo en particular no pretendo ni pretendía nada como eso. Estaba comentándote en total broma así a ti pero nunca con intensión de ofenderte de ninguna forma. Esto es mi verdad.

En fin, sino es así, es que a mi me ha parecido por tu respuesta y creo que si es así me estas prejuzgando totalmente erróneamente.

Saludos
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)