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

seleccionar un valor con mas de una condicion en tablas distintas

Estas en el tema de seleccionar un valor con mas de una condicion en tablas distintas en el foro de Mysql en Foros del Web. Hola de nuevo. Esta vez me he metido en un rollo grande. Me explico: tengo una tabla F_CLI con x campos dentro de ellos me ...
  #1 (permalink)  
Antiguo 26/03/2009, 06:16
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 20 años, 11 meses
Puntos: 2
seleccionar un valor con mas de una condicion en tablas distintas

Hola de nuevo.

Esta vez me he metido en un rollo grande.

Me explico:

tengo una tabla F_CLI con x campos dentro de ellos me importan para la consulta:

CODCLI -> Codigo de cliente. ej: 467
PROCLI -> Provincia de la sede del cliente. ej: MADRID.

Luego Tengo otra tabla F_AMB que amplia las provincias donde ese cliente puede trabajar, con varios campos que tienen el codigo de esa provincias.

CODCLI -> Codigo del cliente ej: 467
PRO1 -> Provincia 1 Ej: 45
PRO2 -> Provicnia 2: Ej: 29

El tema es que quiero una consulta que me devuelva los codigos de cliente cuya provincia sede sea madrid (F_CLI.PROCLI='MADRID') ó alguna de las provincias donde trabaja sea 29 (F_AMB.PRO1 or F_AMB.PRO2) = 29.

Espero haber sido claro y que esto tenga alguna solucion porque la que se me ocurrio e implemente pasa por hacer una consulta a cada tabla y despues comparar los resultados en php. y desdpues rehacer la consulta en la tabla F_CLI para obtener los datos de los cleintes que cumple esa condicion!!!

En fin pedazo de codigo pa una cosilla, y espero que alguien mas versado que yo en mysql me heche una mano.

Gracias por adelantado
DUN
  #2 (permalink)  
Antiguo 26/03/2009, 06:48
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 20 años, 11 meses
Puntos: 2
Respuesta: seleccionar un valor con mas de una condicion en tablas distintas

YA TENGO UNA SOLUCION MUY PROBABLEMENTE MEJORABLE, PERO SE LAS DEJO POR SI A ALGUIEN PUEDE SERVIRLE O QUIERE DECIRME QUE MI DISPARATE SE MEJORA HACIENDO TAL O MASCUAL COSA...

select F_CLI.CODCLI from F_CLI, F_AMB
where
(F_CLI.CODCLI=F_AMB.CODCLI) and
(F_AMB.PRO1=29 or F_AMB.PRO2=29 or F_AMB.PRO3=29) and
(F_CLI.PROCLI='MADRID')

SALUDOS
  #3 (permalink)  
Antiguo 26/03/2009, 07:14
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: seleccionar un valor con mas de una condicion en tablas distintas

Función XOR (OR exclusivo: o uno o el otro, pero no los dos).
Algo así debería funcionar:
Código SQL:
Ver original
  1. SELECT codcli, procli
  2. FROM f_cli INNER JOIN f_amb USING (CODCLI)
  3. WHERE PROCLI='MADRID' XOR (PRO1 = 29 OR PRO2 = 29);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 26/03/2009, 08:10
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 20 años, 11 meses
Puntos: 2
Respuesta: seleccionar un valor con mas de una condicion en tablas distintas

Hola gnzsoloyo.

Gracias por tu repuesta, al meter lo que me dices recibo este error:

Código:
Error

consulta SQL: Documentación

SELECT CODCLI
FROM F_CLI
INNER JOIN F_AMB
USING ( CODCLI )
WHERE PROCLI = 'MADRID'
XOR (
PRO1 =29
OR PRO2 =29
)
LIMIT 0 , 30;

MySQL ha dicho: Documentación
#1052 - Column 'CODCLI' in field list is ambiguous
que no se exactamente a que se deb, y otra cosa no deberia ser uan selección exclusiva, necesitaria que me delvolviera los clientes cuya provincia sede sea madrid (PROCLI='MADRID') o tambien aquellos cuyas provincias donde trabajan sea por ejemplo 29 (PRO1=29 OR PRO2=29).

Gracias de nuevo por tu respuesta
  #5 (permalink)  
Antiguo 26/03/2009, 08:15
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: seleccionar un valor con mas de una condicion en tablas distintas

Cita:
MySQL ha dicho: Documentación
#1052 - Column 'CODCLI' in field list is ambiguous
Dice simplemente que la columna CODCLI en el WHERE es ambigua, esto es, aparece en más de una tabla y no sabe cuál es la que debe poner, pero para el caso, podemos mejorar la cosa:

Código SQL:
Ver original
  1. SELECT CODCLI
  2. FROM F_CLI F INNER JOIN F_AMB A USING (CODCLI)
  3. WHERE A.PROCLI = 'MADRID' XOR (PRO1 =29 OR PRO2 =29)
  4. LIMIT 0 , 30;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 26/03/2009, 08:18
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 20 años, 11 meses
Puntos: 2
Respuesta: seleccionar un valor con mas de una condicion en tablas distintas

Perdona que siga con lo mism pero no rula!!

Código PHP:
Error consulta SQLDocumentación

SELECT CODCLI
FROM F_CLI F
INNER JOIN F_AMB A
USING 
CODCLI )
WHERE A.PROCLI 'MADRID'
XOR (
PRO1 =29
OR PRO2 =29
)
LIMIT 0 30;

MySQL ha dichoDocumentación
#1052 - Column 'CODCLI' in field list is ambiguous 
Saludos
DUN
  #7 (permalink)  
Antiguo 26/03/2009, 08:22
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: seleccionar un valor con mas de una condicion en tablas distintas

Código sql:
Ver original
  1. SELECT f.codcli
  2. FROM f_cli f INNER JOIN f_amb a USING(codcli)
  3. WHERE a.procli = 'madrid' XOR (pro1 =29 OR pro2 =29)
  4. LIMIT 0 , 30;

¿Qué versión de MySQL usa el server?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 26/03/2009, 08:54
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 20 años, 11 meses
Puntos: 2
Respuesta: seleccionar un valor con mas de una condicion en tablas distintas

Ya va bien pero justo ahora em he dado cuenta de que tengo un erorr en el planteamiento y me explico.

Tabla F_CLI

CODCLI - PROCLI - ........
467 - MADRID - ........
468 - MADRID - ........
469 - MADRID - ........
470 - HUELVA - ........
480 - HUESCA - ........
481 - ALAVA - .........

Tabla F_AMB
CODCLI - PRO1 - PRO2 - ......
467 - 29 - 42 - ......
468 - 32 - 29 - .......
470 - 35 - 29 - ......
480 - 29 - 0 - .......

NOTA: Los clientes 481, 469 no aparecen en la tabla F_AMB porque solo trabajan en MADRID no tienen provincias adicionales donde trabajen.

Al consultar con esta consulta:
.."Clientes que tienen su sede en MADRID (PROCLI='MADRID)"...."o que alguna de sus provincias de actuacion sea 29 (PRO.xn=29)"....

pretendo obtener los siguientes codigos de clientes:
467, 468, 469, 470, 480

Creo que ahora si he explicado bien mi problema. y por cierto em he dado cuenta que mi consulta MySql inicial donde decia que ya lo tenia, tampoco resuelve este problema.

Gracias por la paciencia.
  #9 (permalink)  
Antiguo 26/03/2009, 09: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: seleccionar un valor con mas de una condicion en tablas distintas

Eso significa que te devuelva los valores de la primera tabla que no sean nulos y que o trabajen en Madrid, o bien en una provincia con ID=29.
Pues bien, para eso estaría el LEFT JOIN (Tabla izquierda de la consulta):
Código sql:
Ver original
  1. SELECT f.codcli
  2. FROM f_cli f LEFT JOIN f_amb a USING(codcli)
  3. WHERE a.procli = 'madrid' XOR (pro1 =29 OR pro2 =29)
  4. LIMIT 0 , 30;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 26/03/2009, 09:46
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 20 años, 11 meses
Puntos: 2
Respuesta: seleccionar un valor con mas de una condicion en tablas distintas

cojonudo!!! A QUEDADO ASÍ
Cita:
SELECT f.CODCLI
FROM F_CLI f LEFT JOIN F_AMB a USING(CODCLI)
WHERE ((f.PROCLI = 'MADRID') OR (PRO1=29 OR PRO2=29)) AND (f.TCLCLI=005)
LIMIT 5;
EL utimo argumento es un filtro f.TCLCLI que define cual de esos clientes es una empresa instaladora!

Gracias miles!!!
  #11 (permalink)  
Antiguo 26/03/2009, 09:58
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: seleccionar un valor con mas de una condicion en tablas distintas

No hay de qué. Para eso estamos en este foro...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 04:12.