tipos registros que por ordenar orden hace fecha ejemplos descendente consultas sql insert informix

sql - registros - Insertar en valores temp(seleccione... ordenar por id)



que hace el order by en sql (7)

Estoy usando un DB de Informix (Versión 7.32). En una operación, creo una tabla temporal con el ID de una tabla normal y una columna en serie (así tendría todos los ID de la tabla normal numerados continuamente). Pero quiero insertar la información de la tabla normal ordenada por ID algo así como:

CREATE TEMP TABLE tempTable (id serial, folio int ); INSERT INTO tempTable(id,folio) SELECT 0,folio FROM regularTable ORDER BY folio;

Pero esto crea un error de sintaxis (debido a ORDER BY)

¿Hay alguna manera de que yo pueda ordenar la información y luego insertarla en la tabla temporal?

ACTUALIZACIÓN: La razón por la que quiero hacer esto es porque la tabla regular tiene aproximadamente 10,000 elementos y en un archivo jsp, tiene que mostrar cada registro, pero tomaría mucho tiempo, así que la verdadera razón por la que quiero hacer esto es para paginar La salida. Esta versión de Informix no tiene Limit ni Skip . No puedo renumerar el número de serie porque está en una relación, y esta es la única solución en la que podríamos obtener un número fijo de resultados en una página (por ejemplo, 500 resultados por página). En la tabla Regular se han omitido las identificaciones (llamadas folio) porque se han eliminado. si tuviera que poner

SELECT * FROM regularTable WHERE folio BETWEEN X AND Y

Me daría quizás 300 en una página, luego 500 en la página siguiente


En Informix cuando se usa un SELECT como una subcláusula en una instrucción INSERT, usted está limitado a un subconjunto de la sintaxis SELECT .

Las siguientes cláusulas SELECT no son compatibles en este caso:

  • EN TEMP
  • ORDEN POR
  • UNIÓN.

Además, la cláusula FROM de SELECT no puede hacer referencia a la misma tabla a la que hace referencia el INSERT (no es que esto importe en su caso).


Han pasado años desde que trabajé en Informix, pero quizás algo así funcione:

INSERT INTO tempTable(id,folio) SELECT 0, folio FROM ( SELECT folio FROM regularTable ORDER BY folio );


No tiene sentido ordenar las filas mientras las inserta en una tabla. Las bases de datos relacionales no le permiten especificar el orden de las filas en una tabla.

Incluso si pudiera, SQL no garantiza que una consulta regrese las filas en cualquier orden, como el orden en que las insertó. Debe especificar una cláusula ORDER BY para garantizar un pedido de un resultado de consulta.

Por lo tanto, no le haría ningún bien cambiar el orden en que inserta las filas.


Puede probar iterando un cursor sobre SELECT ... ORDER BY y haciendo los INSERT dentro del ciclo.


Algo como esto funcionaría?

SELECT folio FROM ( SELECT ROWNUM n, folio FROM regularTable ORDER BY folio ) WHERE n BETWEEN 501 AND 1000

Puede que no sea terriblemente eficiente si la tabla crece o si está buscando "páginas" posteriores, pero 10K filas es bastante pequeña.

No recuerdo si Informix tiene un concepto ROWNUM, yo uso Oracle.


Como dice Bill, no hay mucho punto ordenando la entrada, realmente necesita pedir la salida. En el ejemplo simplista que ha proporcionado, simplemente no tiene sentido, así que solo puedo suponer que el problema real que está tratando de resolver es más complejo, ¿quizás la desduplicación?

La funcionalidad que buscas es CREATE SEQUENCE , pero estoy bastante seguro de que no está disponible en una versión tan antigua de Informix.

Si realmente necesita hacer lo que está pidiendo, puede buscar UNLOAD los datos en el orden requerido y luego LOAD de nuevo. Eso garantizaría que los valores de SERIAL se asignaran secuencialmente.


Puede hacer esto dividiendo el SQL en dos tablas temporales:

CREATE TEMP TABLE tempTable1 ( id serial, folio int); SELECT folio FROM regularTable ORDER BY folio INTO TEMP tempTable2; INSERT INTO tempTable1(id,folio) SELECT 0,folio FROM tempTable2;