Comunidad de diseño web y desarrollo en internet online

Consulta SQL Multitabla

Citar            
MensajeEscrito el 16 Nov 2007 10:13 pm
Tengo que hacer una consulta a 2 tablas, he provado de todas maneras pero aun no puedo.-

Les dejo un ejemplo:

Código :

Tabla1
id elemento CSubelemento
1     pc      botones
2     pc      pantalla
3     cd      hojas
4     pc      mouse

Tabla2
nelemento Csubelmento tipo 
   el2        4         s
   el6        1         f             
   el3        3         p
   el2        2         f
   el3        1         p
   el4        1         s

Tengo los siguientes datos:
tabla1.elemento="pc"
tabla2.nelemento="el2"
y Necesito saber:

elemento subelmento tipo Subelemento
   el2        4       s    mouse
   el2        2       f    pantalla
   null     null    null   botones


Tengo que filtrar la tabla1 y la tabla2, para luego unir a traves de un left join, pero no me resulta.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie
Citar            
MensajeEscrito el 17 Nov 2007 06:40 pm
Me di cuenta que me equivoque en algunos datos:
Rectifico:

Código :

Tabla1
id elemento subelemento
1     pc      botones
2     pc      pantalla
3     cd      hojas
4     pc      mouse

Tabla2
nelemento csubelmento tipo 
   el2        4         s
   el6        1         f             
   el3        2         p
   el2        2         f
   el3        1         p
   el4        1         s

Tengo los siguientes datos:
tabla1.elemento="pc"
tabla2.nelemento="el2"
y Necesito saber:

elemento csubelmento tipo subelemento
   el2        4       s    mouse
   el2        2       f    pantalla
   null     null    null   botones



:S Nadie entiende mi pregunta!!!, Darel puede que sepa.-

Dejo mi intruccion Sql:

Código :

$query="Select t2.elemento t2.subelmento t2.tipo t1.Subelemento
from tabla1 t1 left join tabla2 t2
on t1.id = t2.csubelmento
where t1.elemento=\"pc\" and t2.nelemento=\"el2\""

Esto me arroja

elemento csubelmento tipo subelemento
   el2        4       s    mouse

Ya que al enlazar las tabla1 toma el primer dato que tenga el id.-
Lo que NO se es como poder fitrar los datos de ambas tablas antes de hacer el Left Join.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie
Citar            
MensajeEscrito el 17 Nov 2007 06:58 pm
Me quedo un poco desordenado el texto de arriba:

Código :

$query="Select t2.elemento t2.subelmento t2.tipo t1.Subelemento
from tabla1 t1 left join tabla2 t2
on t1.id = t2.csubelmento
where t1.elemento=\"pc\" and t2.nelemento=\"el2\""

Esto me arroja

Código :

elemento csubelmento tipo subelemento
   el2        4       s    mouse

Ya que al enlazar las tabla1 toma el primer dato que tenga el id.-
Lo que NO se es como poder fitrar los datos de ambas tablas antes de hacer el Left Join.-

Disculpen el Doble Post, lo hize para que se entendiera mejor.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie
Citar            
MensajeEscrito el 20 Nov 2007 06:07 pm
Tu tabla " tabla2" debe ir a la izquierda de la unión, porque es la maestra, la tabla1 es como una tabla secundaría que ligas con un ForeignKey en tabla2.
Si se puede filtrar antes, con una subconsulta, pero no la necesitas, con esto que te pongo debería funcionar.


Código :

Select t2.elemento t2.subelmento t2.tipo t1.Subelemento

from tabla2 t2 left join tabla1 t1

on t2.id = t1.csubelmento

where t1.elemento="pc" and t2.nelemento="el2"


Igual si no, publica las dos tablas(CREATE TABLE..) y con registros(INSERT INTO...)

Y cuando tenga un tiempito libre como ahora, pruebo el SQL.

saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 20 Nov 2007 06:23 pm
Estuve buscando la solución, y pues no pude escaparme de las consultas anidadas.
Te comento Dano que esa consulta fué la primera que hice y no funcionó, Igual te dejo el código de las tablas para que pruebes mejor. Si puedes optimizarla, también me ayudarás a mí.

Código :

SELECT R.nelemento, R.csubelemento, R.tipo, tabla1.subelemento
FROM tabla1 LEFT JOIN (SELECT tabla2.nelemento, tabla2.csubelemento, tabla2.tipo FROM tabla2 WHERE nelemento='e12') AS R ON R.csubelemento=tabla1.id
WHERE tabla1.elemento='pc' AND (R.nelemento='e12' OR R.nelemento IS NULL)


Código :

CREATE TABLE `tabla1` (
  `id` int(11) NOT NULL,
  `elemento` varchar(40) NOT NULL,
  `subelemento` varchar(40) NOT NULL
) 

INSERT INTO `tabla1` VALUES (1, 'pc', 'botones');
INSERT INTO `tabla1` VALUES (2, 'pc', 'pantalla');
INSERT INTO `tabla1` VALUES (3, 'cd', 'hojas');
INSERT INTO `tabla1` VALUES (4, 'pc', 'mouse');

CREATE TABLE `tabla2` (
  `nelemento` varchar(5) NOT NULL,
  `csubelemento` int(11) NOT NULL,
  `tipo` varchar(5) NOT NULL
) 

INSERT INTO `tabla2` VALUES ('e12', 4, 's');
INSERT INTO `tabla2` VALUES ('e16', 1, 'f');
INSERT INTO `tabla2` VALUES ('e13', 2, 'p');
INSERT INTO `tabla2` VALUES ('e12', 2, 'f');
INSERT INTO `tabla2` VALUES ('e13', 1, 'p');
INSERT INTO `tabla2` VALUES ('e14', 1, 's');



Traté de evitar una cosulta por cada una de las tablas.
Si no te resulta york3rs o crees que se puede reducir, me avisas para seguir intentando.

Saludos.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox
Citar            
MensajeEscrito el 20 Nov 2007 07:25 pm
Darel, usando tus tablas probé mi SQL y funciona bien sin consultas anidadas. Solo se me escapaba el último row de botones, que no tiene liga con la otra table, pero eso se soluciona. Simplemente es lógica de unión, en el ON se resuelve, es todo.

Código :

SELECT *
FROM tabla1 t1 LEFT JOIN tabla2 t2
ON t1.id = t2.csubelemento AND ( t2.nelemento="e12" OR t2.nelemento IS NULL)
WHERE 
   t1.elemento="pc";


Cualquier duda por aqui seguimos.

saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 20 Nov 2007 07:40 pm

Dano escribió:

Darel, usando tus tablas probé mi SQL y funciona bien sin consultas anidadas. Solo se me escapaba el último row de botones, que no tiene liga con la otra table, pero eso se soluciona. Simplemente es lógica de unión, en el ON se resuelve, es todo.

Código :

SELECT *
FROM tabla1 t1 LEFT JOIN tabla2 t2
ON t1.id = t2.csubelemento AND ( t2.nelemento="e12" OR t2.nelemento IS NULL)
WHERE 
   t1.elemento="pc";


Cualquier duda por aqui seguimos.

saludos


Bueno, no sabia que podia hacer eso con el ON. Algo nuevo aprendí hoy.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox
Citar            
MensajeEscrito el 21 Nov 2007 01:13 am
Disculpe que no haya colaborado en la discusion, pero hoy en mi trabajo fue un dia de locos.-
Gracias por la respuesta.

Y disculpa Darel si hice que te calentaras la cabeza.- Estare Agradecido.

Y como dicen "siempre se aprenden cosas nuevas".-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.