Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
Question unir 2 consultas con campos diferentes..

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?

Código SQL [-]
 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
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #2  
Antiguo 30-09-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.

Código SQL [-]
  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
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 30-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
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?

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

no me los pone juntos.

saludos

gracias
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #4  
Antiguo 30-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
bueno reafirmando la tabla antes puesta como que no se bio bien
haber si con el quote no se recorren los espacios

Cita:
articulo cliente proveedor
------------------------------
leche pepe movistar
paste juan telmex
pan ruperto unefon
tornillo jose
miguel
lolo
edgar
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #5  
Antiguo 30-09-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 30-09-2005 a las 09:50:33.
Responder Con Cita
  #6  
Antiguo 30-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
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

Código SQL [-]
 select distinct nom_cliente from temporal
asi no ahi problema

pero asi:
Código SQL [-]
 select distinct nom_cliente, distinct nom_proveedor from temporal

no se puede =S
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #7  
Antiguo 01-10-2005
MaSSaKKre MaSSaKKre is offline
Miembro
 
Registrado: sep 2005
Posts: 34
Poder: 0
MaSSaKKre Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 03-10-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por sakuragi
...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í:

Código SQL [-]
   insert into TablaTemp (articulo, cliente, proveedor) values ('leche', NULL, NULL)

Y luego los dos updates de las siguientes:

Código SQL [-]
   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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:26:25.


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
Copyright 1996-2007 Club Delphi