Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   sentencia sql firebird (https://www.clubdelphi.com/foros/showthread.php?t=90107)

anubis 08-04-2016 04:46:04

sentencia sql firebird
 
Hola amigos,
No sabia como titular el post para que sea claro, pero necesitaba saber si esta sentencia es valida o tiene alguna fisura.

Código SQL [-]
select sum(a.cantidad*a.preciocoste) as total, sum(a.cantidad*a.PRECIOCOSTE*(b.iva/100)) as totaliva
from COMPRASDETALLE a, productos b
where a.ID_COMPRA=22 and a.ID_PRODUCTO=b.ID_PRODUCTO

la idea es, en un entorno donde voy metiendo los productos en una factura de compra en la que la estructura es:

cantidad, nombreproducto, preciocoste, preciototal(sin iva)

esos datos estarian en la tabla de comprasdetalle, y en la tabla de productos el iva.

Metiendo cada vez un producto, me actualizaria el total sin iva y el iva.

No se si esa sentencia sql se debe hacer asi o hay alguna otra forma usando un inner join.
Mas que nada por hacer las cosas correctamente aunque funcionen.

gracias

AgustinOrtu 08-04-2016 06:09:02

No es mas facil probarla?

Yo hice un simple SELECT * FROM A, B y ni se quejo

Hay varios tipos de joins en Firebird, en el sitio de IBExpert hay buena documentacion. De hecho, por lo menos en la busqueda apurada que hice, es el unico que menciona la sintaxis como la que pusiste vos: omitiendo el tipo de join

Algunos ejemplos validos

Código SQL [-]
  SELECT * FROM A, B
 
  SELECT * FROM A JOIN B

  SELECT * FROM A INNER JOIN B ON (A.Id = B.Id)

anubis 08-04-2016 06:14:48

gracias por contestar ;)
Si, probarla si la he probado, de hecho uso flamerobin y funciona bien.
La pregunta era simplemente si asi estaba bien la sentencia sql o hay alguna otra forma mas optimizada o mas rapida para hacer eso mismo.

gracias ;)

AgustinOrtu 08-04-2016 06:46:45

Revisa estos articulos:

Entendiendo a los Join
Join Implicito y Join Explicito
Inner Join y Outer Join
Natural Join y Cross Join

Casimiro Notevi 08-04-2016 09:48:01

Cita:

Empezado por anubis (Mensaje 504157)
No se si esa sentencia sql se debe hacer asi o hay alguna otra forma usando un inner join.

Es lo mismo, internamente la sentencia que has escrito, la traduce el compilador con inner join. Por lo que el resultado es el mismo.
Al menos eso es lo que me explicaron hace muuuuuuchos años, no sé si seguirá igual.

Lepe 08-04-2016 15:18:38

dos cositas (tonterías):
- Supongo estarás en dialecto 3, porque dependiendo de los tipos de cada campo, esa división por 100, no retornaría el valor correcto en dialecto 1. Entiendo que usas el 3 y no tienes problemas con BBDD antiguas.

- Los alias usados en ese SQL puede ser un infierno cuando tengas más tablas. Yo por ejemplo uso la primera letra de cada palabra: COMPRADETALLES CD, PRODUTOS P. Usa dos letras o como te sea fácil, lo agradecerás al leer el select: sum(cd.cantidad*cd.PRECIOCOSTE*(p.iva/100))

En cuanto a tu pregunta original, entiendo que usas claves primarias y ajenas (foráneas), así que está optimizada. Siempre que puedas, usa índices simples en Firebird. Me refiero a que no crees un índice en la tabla formado por dos o más campos , Firebird solo los usa en casos muy concretos.

Saludos.

anubis 09-04-2016 08:51:25

Gracias por la, información, me queda claro q mientras, funcione no hay problema.
Solo q en la, página firebird21 habla de optimizar filtros y consultas para filtrar datos

Enviado desde mi Moto G 2014 mediante Tapatalk


La franja horaria es GMT +2. Ahora son las 04:49:41.

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