PDA

Ver la Versión Completa : unir 2 consultas con campos diferentes..


sakuragi
30-09-2005, 02:22:28
hola que tal

eh estado tratando de unir dos consultas con campos diferentes, leyendo manuales y libros pero no e podido dar con el problema.

bueno primero es la pregunta se puede haser esto.

tengo dos tablas:
clientes
proveedores

quiero unir los dos campos de los nombres de cada tabla.

que me aparesca:

"nombre nombre" en el resultado

nombre_cliente nombre_proveedor
-------------------------------------
juan telmex
pepe movistar
pacheco unefon



algo asi.

se puede hacer esto?


select (C.nombre)as nombre_cliente,(P.nombre)as nombre_proveedor
from proveedor P,cliente C

con este me da un resultado de repedidos todos los cliente scon todos los proveedores

entonses enseguida intente una union.

pero no se pueden unir por que me pone los dos campos en uno solo

bueno

gracias

saludos

Neftali [Germán.Estévez]
30-09-2005, 09:14:44
La clave está en cómo quieres relacionarlos. Es decir, tu quieres unir un nombre de cliente con un nombre de proveedor, pero ¿tendrás algun campo que relaciones las dos tablas no? Lo lógico sería:
(a) En la tabla cliente un código de proveedor (o similar)
(b) En la tabla proveedor, un código de cliente (o similar)

Se trata de hacer la consulta que has puesto, pero utilizando un JOIN por el campo de union entre ambas tablas.


select (C.nombre)as nombre_cliente,(P.nombre)as nombre_proveedor
from proveedor P INNER JOIN cliente C
on P.id=Cliente.idproveedor


... o similar

sakuragi
30-09-2005, 09:26:36
gracias por responder

pero la duda que tengo es poner campos que no tengan nada que ver entre si

como si fueran dos o tres consultas

pero que me las despliegue como si fueran campos de una tabla, pero que en realidad son campos de tablas diferentes

tengo tablas:
articulos
clientes
proveedor

cada tabla tiene su campo nombre que es el nombre de articulo,cliente,proveedor.

lo cual quiero desplegar, cada uno de los campos pero juntos

por ejemplo en un grid

articulo cliente proveedor
------------------------------
leche pepe movistar
paste juan telmex
pan ruperto unefon
tornillo jose
miguel
lolo
edgar

asi mas omenos que no tengan que ver unos con lo otros

como si fueran tres select a tres tablas pero poder mosrarlar en un grid jutnos asi como arriba.

se podra?:confused:

por que si hago un procedure que me ejecute los tres select

no me los pone juntos.

saludos

gracias

sakuragi
30-09-2005, 09:30:09
bueno reafirmando la tabla antes puesta como que no se bio bien
haber si con el quote no se recorren los espacios


articulo cliente proveedor
------------------------------
leche pepe movistar
paste juan telmex
pan ruperto unefon
tornillo jose
miguel
lolo
edgar

Neftali [Germán.Estévez]
30-09-2005, 09:34:14
Creo que deberías mirar de hacerlo con una tabla temporal, porque con una consulta no acabo de verlo claro.
Crear la tabla temporal y añadir los registros de cada tabla a una columna.
El problema es que al no tener relación entre tablas, siempre te va a realizar el producto cartesiano entre las tablas y te van a salir registros repetidos (como ya has comentado)

sakuragi
30-09-2005, 19:54:58
gracias de nuevo

ya intente

hacer una tabla temporal

haciendo varios insert con su determinado select


pero el problema que tengo es que si son varios

me los va metiendo

pero me va dejando espasion null

por que primero me hace uno y despues el otro.


despues quise probar con un procedure

el primero si me lo inserte

los de mas con update para los campos que esten e null me los actulize el problema que el update tiene que ser referencia a algo. entonses me quede en las mismas otraves =S

ppor que si dejo ai la tabla con los null

ahora me meto en otra cuestion

quitar en una consulta en esa tabla los repetidos de cada columna


select distinct nom_cliente from temporal

asi no ahi problema

pero asi:

select distinct nom_cliente, distinct nom_proveedor from temporal


no se puede =S

MaSSaKKre
01-10-2005, 09:24:51
pues bue,...

opino lo mismo que el compañero Neftali.
Debes de tener un campo que te relacione las tablas, sino nunca le vas a poder unir los datos.
Te recomiendo que leas un poco sobre Base de Datos Relacionales y Las Formas Normales, para que logres comprender realmente como relacionar las tablas por medios de un campo.

Como tu dices, quizas las tablas sean totalmente distintas y no tengan nada que ver, pero un campo las puede relacionar.

Ejemplo:

Tabla
Articulo
ID_Art, ID_Marca, Precio

Tabla Marca
ID_Marca, ID_Proveedor,

Tabla Proveedor
ID_Proveedor,Direccion, Telefono, Estado, Mail

Tabla Clientes
N.Cliente, ID_Articulo, nombre, direccion, telefono


ahi podrias hacer una consulta donde te dijera:

El Cliente "X" compro el Articulo "Y" correspondiente a la Marca "Q" con precio "Z", vendida por el porveedor "L"

Select N.cliente,ID_Articulo, nombre, ID_Art, ID_Marca.Articulo, ID-Marca.Marca,Precio,ID_Proveedor.Marca,ID_Proveedor.Proveedor
from Articulo, Marca, Proveedor, Clientes
Where ID_Articulo = ID_Art and ID-Marca.Marca=ID-Marca.Articulo And ID_Proveedor.Marca=ID_Proveedor.Proveedor


cuando aplicas las formas normales en la creacion de tus tablas, estaras depurando tu tabla y salvandola de la repeticion innecesaria de datos, solo con un identificador puedes hacer referencias a otros datos en lugar de almacenar miles de veces el mismo dato en distintas tablas.

Espero haberte orientado un poco, se que no te resolvi tu duda, pero creo que tu problema viene desde la raiz, desde lo fundamental que son las Formas Normales.

Saludos

Neftali [Germán.Estévez]
03-10-2005, 10:12:28
...pero el problema que tengo es que si son varios me los va metiendo pero me va dejando espasion null. Por que primero me hace uno y despues el otro.
Me refería a combinar INSERT/UPDATE (tal vez no me expliqué bien).

articulo___cliente____proveedor
------------------------------
leche______pepe_______movistar
paste _____juan_______telmex
pan _______ruperto ___unefon
...

Se trataría de hacer un recorrido por las tres tablas a la vez y realizar el INSERT de la primera, algo así:


insert into TablaTemp (articulo, cliente, proveedor) values ('leche', NULL, NULL)


Y luego los dos updates de las siguientes:


update TT set cliente='Cliente' where articulo='leche'
// BIS para el otro, o incluso hacerlos los dos juntos.


De todas formas como te he dicho , no le veo sentido a ésto, ya que no tienen ningun órden. Las tablas deberían estar relacionadas, sino lo único que consigues es una mezcla de datos sin sentido.