Ir al contenido


Foto

Problema con consultas y UNION


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

#1 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 19 junio 2014 - 09:18

Que tal amigo, pues nada con una consulta, tengo 5 consultas que necesito los resultados juntos por eso decidí unirlas con UNION, en cada consulta pongo diferentes valores en las clausulas where, pero esto al hacer una consulta de todo, se cuelga bastante, estaba pensando en el resultado en ves de obtenerlo por las consulta, hacer que se guarde en una tabla temporal. pero no puedo hacer lo siguiente:


insert into tabla (camposA,camposB,camposC)
(
select campo1,campo2,campo3 from tabla1 where campo=x
union
select campo1,campo2,campo3 from tabla2 where campo2=y
union
select campo1,campo2,campo3 from tabla3 where campo3=xy
)


alguna sugerencia???

no sé poder ponerlo en una función, un procedimiento, una vista o algo así

gracias de antemano, y saludos.


  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 19 junio 2014 - 11:13

Podrías meterlo en una temporal haceindo uso de esto:

http://elpoli.delphi...r-de-un-select/


Crearias la temporal con el primer select y luego cada select insertarias en la temporal.

Podrías también revisar tus índices. Para ello puedes hacer uso de explain en mysql para cada consulta


  • 0

#3 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 19 junio 2014 - 11:30

gracias amigo!

utilice...


CREATE TEMPORARY TABLE tblTemporal

SELECT campo1,campo2,campo3 FROM tabla1 WHERE campo=x
UNION
SELECT campo1,campo2,campo3 FROM tabla2 WHERE campo2=y
UNION
SELECT campo1,campo2,campo3 FROM tabla3 WHERE campo3=xy



y si! recupero unos segundos pero no es suficiente!

y las tablas si tienen indices pero espero que se pueda mejorar!

(y)

  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 19 junio 2014 - 12:03

De esa manera no  amigo, debe ser de la siguiente forma:

CREATE TEMPORARY TABLE tblTemporal as SELECT campo1,campo2,campo3 FROM tabla1 WHERE campo=x


luego

insert into tblTemporal
SELECT campo1,campo2,campo3 FROM tabla2 WHERE campo2=y



insert into tblTemporal
SELECT campo1,campo2,campo3 FROM tabla3 WHERE campo3=xy

  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 junio 2014 - 12:42

Edité los mensajes para que figuren las etiquetas sql en lugar de code  ;)

Saludos,
  • 0

#6 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 19 junio 2014 - 01:20

De esa manera no  amigo, debe ser de la siguiente forma:


Pero si funciona así como le estoy haciendo amigo! de hecho ahí gano unas milesimas de segundo

porque cundo le intento así con el insert me marca un error con los UNION y requiero que se grabe todo junto por que le puse un consecutivo y deben estar agrupados por clientes y empresas.

(y)
  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 19 junio 2014 - 02:34


Pero si funciona así como le estoy haciendo amigo! de hecho ahí gano unas milesimas de segundo


Podrías hacerlo con un autoincrementable en la temporal. Por que recuerda que el crear una consulta con varios unions resulta en la creación de una temporal del motor. De allí que estás creando dos temporales.


  • 0




IP.Board spam blocked by CleanTalk.