# Query SQL

**URL:** <https://foros.velneo.com/t/query-sql/6679>\
**Category:** Velneo\
**Created:** [3 Diciembre, 2013 00:22 UTC](https://foros.velneo.com/t/query-sql/6679 "2013-12-03T00:22:35Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ceferino](https://avatars.discourse-cdn.com/v4/letter/c/58956e/32.png) [@ceferino](https://foros.velneo.com/u/ceferino)\
**Post date:** [3 Diciembre, 2013 00:22 UTC](https://foros.velneo.com/t/query-sql/6679/1 "2013-12-03T00:22:35Z")

</div>

Hola amigos del foro:  
A ver si hay por aquí alguien que controle SQL.  
Estoy intentando realizar una consulta sobre varias tablas de una BBDD SQlite. El tema es que una tabla (Albaran) tiene cinco maestros o punteros FOREING KEY sobre una misma Tabla (Articulo) y al montar la consulta, si no están cubiertos los cinco campos de los maestros no devuelve nada:  
SELECT  
A.\_id, A.cantidad, A.unidades, H.name, Cmt.name, Cmt.marca, A.cmtkg, Adcc.name, Adcc.marca, A.adcckg, Adt1.name, Adt1.marca, A.adt1kg, Adt2.name, Adt2.marca, A.adt2kg, Adt3.name, Adt3.marca, A.adt3kg, A.r\_AC, A.Pedido, A.Sumin  
FROM  
Albaran A, Articulo H, Articulo Cmt, Articulo Adcc, Articulo Adt1, Articulo Adt2, Articulo Adt3  
WHERE A.\_id = itemId  
AND A.hormg = H.\_id  
AND A.cmt = Cmt.\_id  
AND A.adcc = Adcc.\_id  
AND A.adt1 = Adt1.\_id  
AND A.Adt2 = Adt2.\_id AND A.Adt3 = Adt3.\_id;  
Muchas gracias  
Ceferino

---

<div class="post-metadata">

**Author:** ![adelo](https://avatars.discourse-cdn.com/v4/letter/a/76d3ee/32.png) [@adelo](https://foros.velneo.com/u/adelo)\
**Post date:** [3 Diciembre, 2013 05:46 UTC](https://foros.velneo.com/t/query-sql/6679/2 "2013-12-03T05:46:31Z")

</div>

Buenos días:

Estás poniendo como condición que el campo tenga valor, añade la posibilidad de que sea nulo también:

AND (( A.hormg = H.\_id ) OR (A.hormg IS NULL)) …

Un saludo.

---

<div class="post-metadata">

**Author:** ![ceferino](https://avatars.discourse-cdn.com/v4/letter/c/58956e/32.png) [@ceferino](https://foros.velneo.com/u/ceferino)\
**Post date:** [3 Diciembre, 2013 08:27 UTC](https://foros.velneo.com/t/query-sql/6679/3 "2013-12-03T08:27:31Z")

</div>

Muchas gracias, Adelo:  
He realizado la modificacion que me has propuesto y ahora, en vez de un registro o ficha, devuelve dieciseis filas.  
Además, como el nombre de las columnas de la tabla maestra se llama name las rellena todas sin distinción, aunque el campo de la tabla sea NULL.  
Uff, los querys de SQL…  
Adjunto pantalla por si tuvieras curiosidad…  
En realidad solo las siete primeras columnas estarian correctas, las demas deberian estar vacias…

Saludos  
Ceferino

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/3/35005796acf99ed7e732a0bcd177de59741a565b.png)

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [3 Diciembre, 2013 08:33 UTC](https://foros.velneo.com/t/query-sql/6679/4 "2013-12-03T08:33:58Z")

</div>

Hola Ceferino.

Usa la cláusula LEFT JOIN en cada relación que establezcas, para obtener todos los Albaranes independientemente de si tienen o no claves externas.

Un saludo  
Paco Satué

---

<div class="post-metadata">

**Author:** ![ceferino](https://avatars.discourse-cdn.com/v4/letter/c/58956e/32.png) [@ceferino](https://foros.velneo.com/u/ceferino)\
**Post date:** [3 Diciembre, 2013 08:40 UTC](https://foros.velneo.com/t/query-sql/6679/5 "2013-12-03T08:40:19Z")

</div>

Muchas gracias, Paco:

Intentaré documentarme con ese comando. Está uno acostumbrao a Velneo y esto de salir de casa a explorar nuevos mundos…ye fastidiao

Saludos  
Ceferino

---

<div class="post-metadata">

**Author:** ![ceferino](https://avatars.discourse-cdn.com/v4/letter/c/58956e/32.png) [@ceferino](https://foros.velneo.com/u/ceferino)\
**Post date:** [3 Diciembre, 2013 13:39 UTC](https://foros.velneo.com/t/query-sql/6679/6 "2013-12-03T13:39:14Z")

</div>

Efectivamente, Paco:  
Con el comando LEFT JOIN obtengo el resultado apetecido, un solo registro y las columnas rellenadas correctamente.  
Quedaria así, finalmente:  
SELECT  
A.\_id, A.cantidad, A.unidades, H.name, Cmt.name, Cmt.marca, A.cmtkg, Adcc.name, Adcc.marca, A.adcckg, Adt1.name, Adt1.marca, A.adt1kg, Adt2.name, Adt2.marca, A.adt2kg, Adt3.name, Adt3.marca, A.adt3kg, A.r\_AC, A.pedido, A.sumin, A.central  
FROM  
Albaran A  
LEFT JOIN Articulo H ON A.hormg = H.\_id  
LEFT JOIN Articulo Cmt ON A.cmt = Cmt.\_id  
LEFT JOIN Articulo Adcc ON A.adcc = Adcc.\_id  
LEFT JOIN Articulo Adt1 ON A.adt1 = Adt1.\_id  
LEFT JOIN Articulo Adt2 ON A.adt2 = Adt2.\_id  
LEFT JOIN Articulo Adt3 ON A.adt3 = Adt3.\_id  
WHERE A.\_id = 280800;

Muchas gracias a todos  
Ceferino

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [3 Diciembre, 2013 23:50 UTC](https://foros.velneo.com/t/query-sql/6679/7 "2013-12-03T23:50:59Z")

</div>

Hola Ceferino.

Me alegro que hayas resuelto el problema.  
Te aconsejo que conozcas los comandos principales del SQL estandar, porque lo tendrás que usar en las consultas de la mayor parte de fuentes externas de datos.  
No solo sirve para bases de datos, sino para cualquier fuente de información estructurada, por ejemplo una hoja de Excel.

Suerte y saludos  
Paco Satué
