Ir al contenido


Foto

select first con inner join -select first con varias tablas


  • Por favor identifícate para responder
9 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 27 julio 2009 - 10:34



sql
  1. SELECT * FROM (SELECT FIRST 10 * FROM central ORDER BY entradadatos DESC) ORDER BY entradadatos         



esto como se decia en el hilo consulta sin resultados lo que me permite es buscar los "diez ultimos registros" ordenados de menor a mayor  es decir si son 100 registros del 90 al 100 

Quiero hacer lo mismo pero utilizando varias tablas ejemplo:


sql
  1. SELECT * FROM (SELECT FIRST 100 *  FROM  Activas  INNER JOIN evento ON activas.evento= evento.evento
  2. LEFT JOIN acmsub ON activas.csid=acmsub.csid ORDER BY  ALARMNUM DESC ) ORDER BY alarmnum 



Pero no funciona, saben porque?

(nota-delphius no esta de acuerdo con que son los ultimos registros y como no llego al nivel de su explicacion no quise ni opinar mucho) 


Edito: Perdon amigo, pero se me dificultaba ver tus sentencias SQL  :$
  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 28 julio 2009 - 07:59

SELECT * FROM (SELECT first 10 * FROM central ORDER BY entradadatos DESC) ORDER BY entradadatos         

esto como se decia en el hilo consulta sin resultados lo que me permite es buscar los "diez ultimos registros" ordenados de menor a mayor  es decir si son 100 registros del 90 al 100 

Quiero hacer lo mismo pero utilizando varias tablas ejemplo:


sql
  1. SELECT * FROM (SELECT FIRST 100 *  FROM  Activas  INNER JOIN evento ON activas.evento= evento.evento LEFT JOIN acmsub ON activas.csid=acmsub.csid ORDER BY  ALARMNUM DESC ) ORDER BY alarmnum 



Pero no funciona, saben porque?


(nota-delphius no esta de acuerdo con que son los ultimos registros y como no llego al nivel de su explicacion no quise ni opinar mucho)


Bueno si y no son los últimos. Debes considerar que esto depende del enfoque. Si lo ves desde el punto de vista del ordenamiento Si en efecto son los últimos registros del bloque ordenado de filas. Viendolo desde el punto de vista de las inserciones en la tabla, estos no son necesariamente los últimos registros insertados.

Si AlarmNum es un registro cuyo valor incrementa con cada inserción entonces por la propia naturaleza del order efectivamente te devuelve los últimos insertados.

Que mensaje de error te devuelve?

Saludos.
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 28 julio 2009 - 09:08

Gracias Poliburro por tu respuesta

El campo es autoincrementable,  El error que me dice es el siguiente:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
unknown ISC error 336397221.
 



  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 julio 2009 - 09:43

A mi me parece que el error está en la combinacion de los INNER y LEFT JOIN, no estoy muy seguro de cual debe ser el formato al usar dos join.

Salud OS
  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 28 julio 2009 - 10:03

Analizando con cuidado la consulta he detectado que el error está en el order by dentro de la subconsulta. Especificamente este bloque:

                LEFT JOIN acmsub ON activas.csid=acmsub.csid
              ORDER BY  ALARMNUM DESC

no se a ciencia cierta que motor usas pero en algunos un order by no está  permitido en una subconsulta.

podrí­as quitar ese order y probar
  • 0

#6 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 28 julio 2009 - 10:10

estoy usando firebird 2.1  y la siguiente consulta funciona bien con dos order, pero en una sola tabla, el problema esta en los joins

Código: [Seleccionar]
SELECT * FROM (SELECT first 10 * FROM central ORDER BY entradadatos DESC) ORDER BY entradadatos


  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 28 julio 2009 - 10:19

Hola
Pregunto:
No se necesitan tener campos ligados en las tablas a consultar para que el INNER JOIN funcione?.
Saludos

  • 0

#8 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 28 julio 2009 - 10:36

Hola
Pregunto:
No se necesitan tener campos ligados en las tablas a consultar para que el INNER JOIN funcione?.
Saludos


Efectivamente amigo caral por eso es que en la consulta el ON define que campos se utilizarán para realizar la unión de las tablas.

Saludos
  • 0

#9 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 28 julio 2009 - 11:23

efectivamente la union esta hecha con el ON. 
Por otro lado la consulta no funciona aunque ponga un solo join es decir

sql
  1. SELECT * FROM (SELECT FIRST 100 *  FROM  Activas  INNER JOIN evento ON activas.evento= evento.evento  ORDER BY  ALARMNUM DESC ) ORDER BY alarmnum 




  • 0

#10 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 28 julio 2009 - 12:14

La subconsulta me funciono y me ordeno los registros de menor a mayor de esta manera:


sql
  1. SELECT * FROM (SELECT FIRST 10 alarmnum,csid,activas.evento,fechan,nota,completa,entradadatos FROM activas INNER JOIN evento ON activas.evento=evento.evento ORDER BY  ALARMNUM DESC)ORDER BY alarmnum   



No se la razon, pero si especifico los campos en la subconsulta todo va bien.

Seguire probando para ver si funciona de otras formas, pero por lo menos asi funciona bien.




  • 0




IP.Board spam blocked by CleanTalk.