Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Modificar resultado de un query (https://www.clubdelphi.com/foros/showthread.php?t=96755)

Angel.Matilla 24-06-2024 13:06:48

Modificar resultado de un query
 
Para una base de datos en FB 2.5.6 tengo este query:
Código SQL [-]
SELECT 1 Origen, Disco, Registro, Titulo_Cine FROM Cine WHERE Registro IN (781,905)
Esa tabla Cine tiene declarados dos índices: el primario (ALTER TABLE TITULOS ADD CONSTRAINT PK_TITULOS PRIMARY KEY (TIPO,REGISTRO)) y otro sobre el título (CREATE INDEX TITULOS ON TITULOS(TIPO,TITULO_INDEX)).
Independientemente de como ponga la clausula IN (781,905 ó 905,781) y de si ese índice sobre el título está activo o no, el resultado del query es siempre el mismo:

y me gustaría que el resultado respetara el orden de la clausula IN, en el sentido de mostrarlos en el mismo orden que esté hecha la declaración.

lucho6007 24-06-2024 14:04:52

Hola Ángel, la cláusula IN es de inclusión o no en la respuesta del query. Es algo así como un WHERE.
Si vos necesitás que los registros aparezcan ordenados, tenés que usar ORDER BY en el query.


Saludos

marco3k 24-06-2024 15:36:51

Coincido con Lucho, la clausula IN no hace ningún tipo de ordenación, para eso esta la clausula "order by", tu consulta sería así:

Código SQL [-]
SELECT 1 Origen, Disco, Registro, Titulo_Cine FROM Cine WHERE Registro IN (781,905) order by Registro

Angel.Matilla 24-06-2024 18:02:29

Gracias por las respuestas. El sentido de la clausula IN lo tengo clarísimo. El problema es que no necesariamente el orden ha de ser el del número de registro (no voy a entrar en las razones para ello) y por lo tanto ese order by Registro puede o no valerme. Seguiré investigando.

marco3k 24-06-2024 21:09:47

Otra forma que se me ocurre para que se ordene de la forma que deseas es usando consultas separadas y luego los unes, mas o menos asi:
Código SQL [-]
SELECT 1 Origen, Disco, Registro, Titulo_Cine FROM Cine WHERE Registro = 781
UNION 
SELECT 1 Origen, Disco, Registro, Titulo_Cine FROM Cine WHERE Registro = 905
Puede alternar el numero de registro 781 abajo y 905 arriba y así saldrá

Casimiro Noteví 25-06-2024 10:18:11

Es una locura :p

Angel.Matilla 25-06-2024 11:22:30

Cita:

Empezado por marco3k (Mensaje 556294)
Otra forma que se me ocurre para que se ordene de la forma que deseas es usando consultas separadas y luego los unes, mas o menos asi:
Código SQL [-]
SELECT 1 Origen, Disco, Registro, Titulo_Cine FROM Cine WHERE Registro = 781
UNION 
SELECT 1 Origen, Disco, Registro, Titulo_Cine FROM Cine WHERE Registro = 905
Puede alternar el numero de registro 781 abajo y 905 arriba y así saldrá

Tampoco. Hace lo mismo que con el IN, pero me has dado una pista. Gracias

Angel.Matilla 25-06-2024 11:24:13

Cita:

Empezado por Casimiro Notevi (Mensaje 556307)
Es una locura :p

Sin lugar a dudas. Soy especialista en complicarme la vida.


La franja horaria es GMT +2. Ahora son las 21:38:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi