https://foro.gambas-es.org/viewtopic.php?f=3&t=5718
-----------------------------------
v3ctor
Miercoles, 17 Agosto 2016, 15:05

Subconsulta De Una Columna Que Contiene Solo Un Id?[Resuelto]
-----------------------------------
buenas....

sinceramente no se como formular la pregunta....

pero trata de lo siguiente

tenemos una tabla productos donde se encuentra una llave foránea a el id de proveedores osea un numero integer

por otro lado tenemos un txt donde haremos búsquedas de nombres de proveedores, pero no podemos hacer una búsqueda directa en la tabla productos, porque ahí solo esta el id del proveedor no su nombre.

como se hace esto?
una subconsulta? como seria esa subconsulta?

tal vez obtener primero todos los nombres de proveedores en un array y recién buscar ahí según el filtro aplicado?

como se hace este proceso?


-----------------------------------
shordi
Miercoles, 17 Agosto 2016, 16:45

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
No te líes con eso de que sean llaves foráneas, la consulta se hace exactamente igual que con otros campos.

[code linenumbers=false syntax=gambas]Select a.campo1, a.campo2,a.campo3, b.nombre from productos a left join proveedores b on a.idproveedor = b.rowid[/code]

Mas o menos...


-----------------------------------
calcena
Jueves, 18 Agosto 2016, 09:49

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
En mi opinión, la consulta debe ser:

select b.nombre,a.descripcion 
from tblproductos as a
inner joint tblproveedores as b
on a.id_pro=b.id
where []


de esta forma consigues el nombre del proveedor (directo de la tabla) y la descripción (por poner un campo) de la tabla productos, A y B son Alias para simplificar las consultas.

Saludos.


-----------------------------------
shordi
Jueves, 18 Agosto 2016, 10:17

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
[quote user="calcena" post="33914"]En mi opinión, la consulta debe ser:

select b.nombre,a.descripcion 
from tblproductos as a
inner joint tblproveedores as b
on a.id_pro=b.id
where []


de esta forma consigues el nombre del proveedor (directo de la tabla) y la descripción (por poner un campo) de la tabla productos, A y B son Alias para simplificar las consultas.

Saludos.[/quote]

Inner join te deja fuera de la consulta los productos que no contengan id de proveedor o cuyo id de proveedor es erróneo. Eso hace que, en caso de error en tus bases de datos, tales regisgros sean "invisibles" y no puedas detectar lo que hay de malo en ellas. Sobre todo al ver que los recuentos que hagas con otras consultas no te cuadran con las filas que devuelve ésta. 
Left join, por el contrario, muestra todos los registros de productos y el nombre del proveedor si es que el enlace es bueno, dejando el campo nombre del proveedor a NULL en caso de error, lo cual es muy fácilmente detectable.

Saludos.


-----------------------------------
calcena
Jueves, 18 Agosto 2016, 10:42

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
Buenas shordi, como bien indicas LEFT join nos trae todos los registros de productos, pero mi pregunta es 
¿es correcto tener inconsitencias en una DB?
para eso tenemos los PK - FK que evitan mediante Constraint, etc.
Por otra parte, también es posible que el compañero solo tenga datos en un sitio y no en otro, por lo que LEFT le va mucho mejor.
Eso ya depende, para mi gusto y desarrollos casi al 98% INNER JOIN porque solo tengo datos constrastados.
Detectar una inconsistencia en DB es un quebradero de cabezas, se debe implementar muy bien desde un principio si no ....son horas de debug.
Saludos.


-----------------------------------
shordi
Jueves, 18 Agosto 2016, 11:51

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
[quote]¿es correcto tener inconsitencias en una DB?[/quote]
Por supuesto que no es correcto... pero si tu base es 100% consistente, el resultado de left y de inner es exactamente el mismo. ¿Qué ventaja tiene entonces Inner?

Además, en cuestión de inconsistencias... "el que esté libre de culpa que tire la primera piedra"  :mryellow:  :mryellow:  :mryellow:


-----------------------------------
v3ctor
Jueves, 18 Agosto 2016, 17:34

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
[quote user="shordi" post="33912"]No te líes con eso de que sean llaves foráneas, la consulta se hace exactamente igual que con otros campos.

[code linenumbers=false syntax=gambas]Select a.campo1, a.campo2,a.campo3, b.nombre from productos a left join proveedores b on a.idproveedor = b.rowid[/code]

Mas o menos...[/quote]

me suena que esa linea no es correcta, ya que like debe estar presente

ya que debemos buscar por un filtro que nos dará un textbox.text


-----------------------------------
shordi
Jueves, 18 Agosto 2016, 19:20

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
[quote]me suena que esa linea no es correcta, ya que like debe estar presente[/quote]

A éstas alturas ya deberías ser capaz de añadir el where por tí mismo... 

Vale, te lo pongo yo, pa que no te pierdas  :mryellow:  :mryellow: 
[code linenumbers=false syntax=gambas]Select a.campo1, a.campo2,a.campo3, b.nombre from productos a left join proveedores b on a.idproveedor = b.rowid where micampo like '%mitextbox.tex%'[/code]


-----------------------------------
v3ctor
Domingo, 28 Agosto 2016, 20:50

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
[quote user="shordi" post="33922"][quote]me suena que esa linea no es correcta, ya que like debe estar presente[/quote]

A éstas alturas ya deberías ser capaz de añadir el where por tí mismo... 

Vale, te lo pongo yo, pa que no te pierdas  :mryellow:  :mryellow: 
[code linenumbers=false syntax=gambas]Select a.campo1, a.campo2,a.campo3, b.nombre from productos a left join proveedores b on a.idproveedor = b.rowid where micampo like '%mitextbox.tex%'[/code][/quote]


según esa sentencia quedaría algo así.. pero no anda no se que hago mal.. necesito ver una sentencia real correcta para entender bien como es la sintaxis....

[code linenumbers=false syntax=sql]Select a.*, b.nombre from productos a left join proveedores b on a.idproveedor = b.idproveedor where nombre like '%Sin%'[/code]


dejo tres capturas:

 [img]https://foro.gambas-es.org/files/images/2261/inventario.png[/img] 

 [img]https://foro.gambas-es.org/files/images/2261/productos.png[/img] 

 [img]https://foro.gambas-es.org/files/images/2261/proveedores.png[/img]


-----------------------------------
v3ctor
Martes, 30 Agosto 2016, 21:41

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
[quote user="calcena" post="33914"]En mi opinión, la consulta debe ser:

select b.nombre,a.descripcion 
from tblproductos [b]as a[/b]
inner joint tblproveedores [b]as b[/b]
on a.id_pro=b.id
where []


de esta forma consigues el nombre del proveedor (directo de la tabla) y la descripción (por poner un campo) de la tabla productos, [b]A y B son Alias para simplificar las consultas.[/b]

Saludos.[/quote]

gracias por el dato, importante aclaración


-----------------------------------
v3ctor
Martes, 30 Agosto 2016, 21:43

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
shordi...

este mensaje:

[b][color=#FF0000][17] Error while executing SQL query on database 'inventario0': ambiguous column name: nombre[/color][/b]


sera porque hay columnas con mismo nombre pero en diferentes tablas?

no se permiten o no es conveniente tener ninguna columna con el mismo nombre?


sigo luchando con esta linea que es muy básica y repetitiva pero no hay info de su sintaxis exacta.

trabajando.... jjajajaj


-----------------------------------
v3ctor
Martes, 30 Agosto 2016, 21:48

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
[code linenumbers=false syntax=sql]Select a.*, b.nombre from productos a left join proveedores b on a.idproveedor = b.rowid where b.nombre like '%Sin%'[/code]

esta linea funciona perfecto en sqlitestudio pero no asi en la consola gambas  :shock:   uy que dolor de cabeza esto  :mad:


-----------------------------------
v3ctor
Martes, 30 Agosto 2016, 22:07

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?
-----------------------------------
Vale, te lo pongo yo, pa que no te pierdas  :mryellow:  :mryellow: 
[code linenumbers=false syntax=sql]Select a.campo1, a.campo2,a.campo3, b.nombre from productos a left join proveedores b on a.idproveedor = b.rowid where micampo like '%mitextbox.tex%'[/code]


Select a.campo1, a.campo2,a.campo3, b.nombre from productos a left join proveedores b on a.idproveedor = b.rowid where [b][color=#FF0000][size=18]b.[/size][/color][/b]micampo like '%mitextbox.tex%'


otra cosa   "rowid" puede ser que sea una constante y se refiere siempre a la fila que tiene el atributo primary key no?

saludos y gracias, he sumado aprendizaje con este hilo.


-----------------------------------
shordi
Miercoles, 31 Agosto 2016, 08:38

Re: Subconsulta De Una Columna Que Contiene Solo Un Id?[Resuelto]
-----------------------------------
¡Bravo! con estas cositas se aprende mucho, efectivamente.

[quote]otra cosa   "rowid" puede ser que sea una constante y se refiere siempre a la fila que tiene el atributo primary key no?[/quote]

No. Una constante no. En Sqlite, rowid es una propiedad de cada fila que puedes considerar como una "columna oculta integer primary key autonumeric" si quieres. 
Todas las tablas la tienen y puedes usarla como tal.
Ideal para establecer relaciones y demás.


