Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2003
marcelofabiani marcelofabiani is offline
Miembro
 
Registrado: may 2003
Ubicación: Bolivia
Posts: 64
Poder: 22
marcelofabiani Va por buen camino
Unhappy Ayuda con una consulta sql

Buenas amigos tengo la siguiente consulta

Tengo tres tablas

t1
idmaquina,numero

t2
idcupie,nombre

t3
idmaquina,idcupie,monto,idplanilla

Como deberia hacer para que me muestre todos los registros cuya idplanilla=0 y
idmaquina diferente de 0. [0=Cero]

Yo trate de la siguiente manera pero no salen todos los resulatados

SELECT t2.NOMBRE, t3.MONTO, t3.IDMAQUINA, t3.IDPLANILLA
FROM t2 INNER JOIN (t1 INNER JOIN t3 ON t1.NUMERO = t3.MAQUINA) ON t2.IDCUPIE = t3.IDCUPIE
WHERE (t3.MAQUINA<>-1) AND (t3.IDPLANILLA=0)
ORDER BY t3.IDMONT;

Donde estoy mal

Saludos Marcelo
Responder Con Cita
  #2  
Antiguo 26-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Código:
SELECT t2.NOMBRE, t3.MONTO, t3.IDMAQUINA, t3.IDPLANILLA
FROM t2 INNER JOIN (t1 INNER JOIN t3 ON t1.NUMERO = t3.MAQUINA) ON t2.IDCUPIE = t3.IDCUPIE
WHERE (t3.MAQUINA<>0) AND (t3.IDPLANILLA=0)
ORDER BY t3.IDMONT
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 26-07-2003
marcelofabiani marcelofabiani is offline
Miembro
 
Registrado: may 2003
Ubicación: Bolivia
Posts: 64
Poder: 22
marcelofabiani Va por buen camino
Lamentablemente no me sirve me muestra solo el que tiene idmaquina -1 y no los que quiero que son todos menos los que idmaquina sean -1. Gracias de todas maneras
Responder Con Cita
  #4  
Antiguo 26-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Se supone que la tabla principal de esta consulta es la t3, digo esto porque las otras dos tablas parecen tablas de lookup, para tomar datos descriptivos o algo así, de modo que las demás deben ir relacionadas a ésta, y no como parece que lo tienes.

Algunas dudas:

- ¿Por qué aparece un INNER JOIN a t1 si esta tabla no aporta nada al resultado de la consulta?

- Cuando relacionas t1.NUMERO = t3.MAQUINA, ¿no será t1.MAQUINA el campo a relacionar?

- Parece Access, por la forma tan peculiar de escribir los INNERS, lo que te ofrezco posiblemente haya que retocarlo (o el mismo Access lo corregirá probablemente):

Código:
SELECT t2.NOMBRE, t3.MONTO, t3.IDMAQUINA, t3.IDPLANILLA
FROM t3 
        INNER JOIN t1 ON t1.NUMERO = t3.IDMAQUINA // ¿t1.IDMAQUINA = t3.IDMAQUINA?
        INNER JOIN t2 ON t2.IDCUPIE = t3.IDCUPIE         
WHERE (t3.MAQUINA <> 0) AND (t3.IDPLANILLA = 0)
ORDER BY t3.IDMONT;
Para lo que quieres, salvo que quieras incluir el campo NUMERO de t1 en la lista del SELECT, creo que no hace falta que incluyas t1 en esta consulta (el primer INNER sobraría)
__________________
Guía de Estilo

Última edición por andres1569 fecha: 26-07-2003 a las 12:30:41.
Responder Con Cita
  #5  
Antiguo 27-07-2003
marcelofabiani marcelofabiani is offline
Miembro
 
Registrado: may 2003
Ubicación: Bolivia
Posts: 64
Poder: 22
marcelofabiani Va por buen camino
Pues respondo tus tres interrogantes

Como dices t1 estaba demas y la razon de esto es que como no sabia cual era la forma de crear una sentencia sql para mi objetivo me ayude de access, pero en realidad la base de datos esta en interbase y trabajo y hago las pruebas en el ibconsole.

Efectivamente la relacion esta correcta el problema es que al definir las tablas hubo una equivocacion.

Y por ultimo la solucion que tu me planteas no funciona, me sale un error de que no encuentra (t3.idcupie) cuando hago t2.idcupie=t3.idcupie

Y por ultimo despues de leer (desasnarme ) un poco mas sobre el concepto de inner joins logre mi objetivo con la siguiente sentencia:

Select * from t3 inner join t2 on t2.IDCUPIE=t3.IDCUPIE
where (t3.IDPLANILLA=0) and (t3.MAQUINA>0)
order by montos.IDMONT;

Gracias por la ayuda y los comentarios me sirvieron de mucho
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 03:02:56.


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