Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

consultas a varias tablas

Estas en el tema de consultas a varias tablas en el foro de Mysql en Foros del Web. Hola amigos estoy trabadisimo en algo que en un principio parecia facil pero se me complico y recurro a ustedes bueno, tengo esta consulta @import ...
  #1 (permalink)  
Antiguo 16/03/2011, 09:10
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
consultas a varias tablas

Hola amigos estoy trabadisimo en algo que en un principio parecia facil pero se me complico y recurro a ustedes
bueno, tengo esta consulta
Código MySQL:
Ver original
  1. "SELECT * FROM proveedores
  2.         LEFT OUTER JOIN monedas ON proveedores.cuenta_cor=monedas.mone_id
  3.         LEFT OUTER JOIN condicion_iva ON proveedores.situ_iva=condicion_iva.condicion_iva_id
  4.         WHERE razon_social  LIKE '$nombre_proveedor%'  OR proveedor_id
  5.                             LIKE '$nombre_proveedor%' ORDER BY proveedor_id asc LIMIT 0, 10  ";
y necesito agregarle a esa consulta, el resultado de la comparacion de estas tablas

tabla1.campo1
tabla2.campo1
tabla3.campox ,campo2 ,campo3

necesito que tabla1.campo1=tabla3.campo3 y tabla2.campo1=tabla3.campo2
si se cumplen estas condiciones , me muestre el campox de tabla3
espero haberme explicado bien
Saludos y muchas gracias por su tiempo
  #2 (permalink)  
Antiguo 16/03/2011, 09:16
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: consultas a varias tablas

Con un CASE
  #3 (permalink)  
Antiguo 16/03/2011, 09:29
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

buenisimo gracias por la respuesta , me podrias dar un ejemplo de donde tengo que insertar el case?
  #4 (permalink)  
Antiguo 16/03/2011, 09:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

perdon , en que parte de la primera consulta tendria que insertar el case?
  #5 (permalink)  
Antiguo 16/03/2011, 09:50
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: consultas a varias tablas

En el *. No se si se podrá hacer exactamente con un CASE, pero creo que si, sería algo de la forma:

Código SQL:
Ver original
  1. SELECT CASE tabla1.campo1
  2. WHEN tabla3.campo3 THEN 'SI'
  3. ELSE 'NO'
  4. END
  5. FROM ...
  #6 (permalink)  
Antiguo 16/03/2011, 09:52
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

perfecto muchas gracias ahora lo pruebo
  #7 (permalink)  
Antiguo 16/03/2011, 10:13
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

no hubo caso
no lo puedo hacer funcionar
existe otra forma de hacerlo?
  #8 (permalink)  
Antiguo 16/03/2011, 10:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas a varias tablas

MySQL no te admite selects condicionales o alternativos, como Oracle. Lo único que puedes hacer es que salga o no información en una columna creada por una función, pero la columna debe salir si o si.
Sería algo así:
Código MySQL:
Ver original
  1. SELECT *, IF(P.campo1=C.campo3 AND M.campo1=C.campo2, campox, '') campo_X
  2.     proveedores P
  3.     LEFT JOIN monedas M ON P.cuenta_cor= M.mone_id
  4.     LEFT JOIN condicion_iva C ON P.situ_iva=C.condicion_iva_id
  5.     razon_social  LIKE '$nombre_proveedor%'  
  6.     OR proveedor_id LIKE '$nombre_proveedor%'
  7. ORDER BY proveedor_id ASC
  8. LIMIT 0, 10
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 16/03/2011, 10:48
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

Hola gnzsoloyo gracias por tu respuesta , pero soy novato en mysql y no lo entiendo
vuelvo a la pregunta inicial porque lo mas probable es que me halla explicado mal
yo necesito agregar a esta consulta
Código MySQL:
Ver original
  1. "SELECT * FROM proveedores
  2.         LEFT OUTER JOIN monedas ON proveedores.cuenta_cor=monedas.mone_id
  3.         LEFT OUTER JOIN condicion_iva ON proveedores.situ_iva=condicion_iva.condicion_iva_id
  4.         WHERE razon_social  LIKE '$nombre_proveedor%'  OR proveedor_id
  5.                             LIKE '$nombre_proveedor%' ORDER BY proveedor_id asc LIMIT 0, 10  ";*/
la comparacion de tres tablas tipo_fc,proveedores y empresa
la consulta seria asi pero no se como ponerla en la consulta anterior
"mostrame el campo tipo_fc.tipo_detalle donde tipo_fc.tipo_proveedor=proveedores.situ_iva
y
tipo_fc.tipo_empresa=empresa.e_situ_iva"
Saludos
  #10 (permalink)  
Antiguo 16/03/2011, 11:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas a varias tablas

A eso precisamente iba.
Me explico: MySQL sólo puede ejecutar una consulta en forma expresa. Eso significa que la condición establecida en el FROM y el WHERE debe cumplirse para que se devuelvan registros. Si lo que tu quieres es que se cumpla este FROM (el OUTER no produce efectos en MySQL, sólo existe para usar conexiones con ODBC):
Código MySQL:
Ver original
  1. proveedores P
  2.     LEFT JOIN monedas M ON P.cuenta_cor= M.mone_id
  3.     LEFT JOIN condicion_iva C ON P.situ_iva=C.condicion_iva_id
Significa que quieres a todos los proveedores, sin distinción de monedas o de condición de IVA, ya que te devolverá todos los proveedores, y NULL donde los datos de ese provedor no tengan relación con las otras tablas (estas cosas las puedes leer en el Manual de Referencia).
Ahora bien, respecto a la ora condición adicional, si esa es una condición agregada a las que ya están definidas en el FROM, corresponde que vayan en el WHERE, donde lo que sucederá es que descartará todos los registros que no la cumplan:
Código MySQL:
Ver original
  1.     proveedores P
  2.     LEFT JOIN monedas M ON P.cuenta_cor= M.mone_id
  3.     LEFT JOIN condicion_iva C ON P.situ_iva=C.condicion_iva_id
  4.     (razon_social  LIKE '$nombre_proveedor%'  
  5.     OR proveedor_id LIKE '$nombre_proveedor%' ) AND (P.campo1=C.campo3 AND M.campo1=C.campo2)
  6. ORDER BY proveedor_id ASC
  7. LIMIT 0, 10
Pero si se trata de una condición para que se muestre o no un dato adicional a los que ya devuelve el SELECT, sólo se puede hacer de la forma que te dije: Creando una columna con una función IF(), como ya te mostré.

A diferencia de esto, Oracle permite consultas que pueden resolver una u otra forma de SELECT según ciertas condiciones. Pero ese no es el caso de MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 16/03/2011, 11:58
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

gracias por tu tiempo y por haberme explicado pero sigo sin entender algo
porque aca (P.campo1=C.campo3 AND M.campo1=C.campo2)
estas poniendo las tablas que estan en el left join y no tipo_fc y empresa que son las que necesito agregar a la consulta (ojo, no quiero que me des el codigo listo , me gustaria que me ayudes a usar la logica para poder aprender )
  #12 (permalink)  
Antiguo 16/03/2011, 12:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas a varias tablas

Porque no nos dijiste ni qué campos ni qué tablas... eran:
Cita:
necesito que tabla1.campo1=tabla3.campo3 y tabla2.campo1=tabla3.campo2
Sólo inferí que esas eran las tablas por el orden que das.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 16/03/2011, 12:08
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

Si , pero despues aclare como era , que necesitaba agregar a la consulta esta:
Código MySQL:
Ver original
  1. "SELECT * FROM proveedores
  2.        LEFT JOIN monedas ON proveedores.cuenta_cor=monedas.mone_id
  3.        LEFT JOIN condicion_iva ON proveedores.situ_iva=condicion_iva.condicion_iva_id
  4.        WHERE razon_social  LIKE '$nombre_proveedor%'  OR proveedor_id
  5.                            LIKE '$nombre_proveedor%' ORDER BY proveedor_id asc LIMIT 0, 10  ";*/
dos comparaciones entre otras tablas
que seria algo asi:
"MOSTRAME el campo tipo_fc.tipo_detalle DONDE tipo_fc.tipo_proveedor=proveedores.situ_iva
Y
tipo_fc.tipo_empresa=empresa.e_situ_iva"
  #14 (permalink)  
Antiguo 16/03/2011, 12:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas a varias tablas

El problema es que pidas el campo tipo_fc.tipo_detalle sólo en ese caso. Eso no se admite en MySQL. O lo muestras para todos los registros, o no lo muestras.
El resto es:
Código MySQL:
Ver original
  1.     proveedores P
  2.     LEFT JOIN monedas M ON P.cuenta_cor = M.mone_id
  3.     LEFT JOIN condicion_iva C ON P.situ_iva = C.condicion_iva_id
  4.     INNER JOIN tipo_fc T ON P.situ_iva = T.tipo_proveedor
  5.     INNER JOIN empresa E on T.tipo_empresa = E.e_situ_iva
  6.     (razon_social  LIKE '$nombre_proveedor%'  
  7.     OR proveedor_id LIKE '$nombre_proveedor%' )
  8. ORDER BY proveedor_id ASC
  9. LIMIT 0, 10
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 16/03/2011, 12:41
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

sigo con problemas
ahora me tira este error
#1267 - Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
que puedo hacer ?
  #16 (permalink)  
Antiguo 16/03/2011, 12:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas a varias tablas

Eso es un problema de CHARSET. Significa que el texto que estás pasando en las variables que pones para el LIKE tienen un CHARSET distinto al que usa la tabla.
Lo que debes hacer es que sean iguales, pero eso es tema de PHP más que de MySQL. Deberías consultarlo en el Foro de PHP.
Ellos es más probable que te puedan guiar en ese tema, y además son las reglas de FDW...
En MySQL a lo más lo que puedes hacer es un CAST() en esa cadena de muestra, pero me parece que eso se resuelve mejor en el PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 16/03/2011, 12:53
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

dale te agradezco un monton y voy a ver que me dice en el foro de php
Saludos
  #18 (permalink)  
Antiguo 16/03/2011, 13:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas a varias tablas

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 16/03/2011, 16:39
 
Fecha de Ingreso: octubre-2010
Mensajes: 233
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: consultas a varias tablas

andubo perfecto , tenia que cambiar de la tabla tipo_fc de varchar a int
(soy un queso)
saludos y muchas gracias

Etiquetas: tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:17.