PDA

Ver la Versión Completa : Ayuda con una consulta sql


marcelofabiani
26-07-2003, 01:53:33
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

jachguate
26-07-2003, 02:56:36
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.

;)

marcelofabiani
26-07-2003, 05:03:39
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

andres1569
26-07-2003, 12:27:53
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):


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)

marcelofabiani
27-07-2003, 23:30:13
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:D ) 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:)