Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/09/2012, 16:14
Avatar de gerardo_goh
gerardo_goh
 
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 6 meses
Puntos: 1
unir dos tablas con criterio de dos columnas

Hola que tal tengo el siguiente problema, presento el diseño de mis tablas:

Código MySQL:
Ver original
  1. create table tbllocal (idzona      varchar(3)  not null,
  2.                        desc_zona   varchar(50) not null,
  3.                        cp          varchar(5)  not null,
  4.                        sistema     varchar(2)  not null);
  5.  
  6. insert into tbllocal (idzona,desc_zona,cp,sistema)
  7. values ('001','zona 1','05670','dm'),
  8.        ('001','zona 1-cod','05670','pk'),
  9.        ('003','zona 3','80000','dm'),
  10.        ('004','zona 4','90000','pk'),
  11.        ('005','zona 5','75000','pk'),
  12.        ('006','zona 6','85000','dm'),
  13.        ('007','zona 6-cod','85000','pk');
  14.  
  15.  
  16. create table tblcliente  (idcliente    int          primary key  auto_increment not null,
  17.                           nombre       varchar(50)  not null,
  18.                           sistema      varchar(2)   not null,
  19.                           cp           varchar(5)   not null);
  20.  
  21.  
  22.  
  23. insert into tblcliente (nombre,sistema,cp)
  24. values ('jorge','dm','05670'),
  25.        ('eder','pk','85000'),
  26.        ('isaac','pk','05670'),
  27.        ('pedro','dm','85000'),
  28.        ('ricardo','pk','75000'),
  29.        ('marco','dm','80000'),
  30.        ('francisco','dm','90000');

La situación es que deseo obtener un resumen de la siguiente manera, que teniendo en particularidad que en ambas tablas hay el
dato sistema y cp y para mi sería como la llave para poder unir la consulta

El resultado deseado sería:

Código MySQL:
Ver original
  1. idcliente|nombre     |sistema|desc_zona
  2. ---------------------------------------
  3. 1        |jorge      |dm     |zona1
  4. 2        |eder       |pk     |zona6-cod
  5. 3        |isaac      |pk     |zona1-cod
  6. 4        |pedro      |dm     |zona6
  7. 5        |ricardo    |pk     |zona5
  8. 6        |marco      |dm     |zona3
  9. 7        |francisco  |dm     |sin zona

para llegar este resultado tuve que agregar una columna en las dos tablas y llamarlas como key_local en la tabla de tbllocal, y en la
tabla de tblclient key_cliente y en ellas concatene sistema y cp.

lo que no quiero es alterar la tabla.

presento mi query, me pueden ayudar sin tener que realizar un alter table.

Código MySQL:
Ver original
  1. select a.idcliente,
  2.        a.nombre,
  3.        a.sistema,
  4.        ifnull(b.desc_zona,'sin zona')desc_zona
  5. from tblcliente a
  6. left join (select key_local,desc_zona from tbllocal) b
  7. on a.key_cliente=b.key_local;

Muchas gracias, Saludos!!!
Espero que me haya hecho explicar