SQL - Ayuda con consulta SQL

   
Vista:

Ayuda con consulta SQL

Publicado por David Arteaga (1 intervención) el 05/09/2011 17:28:06
Buen dia, pues la verdad es que yo no se mucho sql solo hago mis pininos en el trabajo inventando cosas nuevas que puedan ayudar.

El punto esta en que hice una BD de inventario de equipo de computo en Open Ofice, por mala aportacion un compañero me dijo que hisiera una tabla por cada periferico es decir una tabla de monitores, una tabla de cpu, una tabla de teclados, etc….

Pero ahora yo quiero hacer los reportes y me salio un pequipo gran problema, que si hago mi consulta se multiplican los resultados.

Esta es mi consulta espero me puedan ayudar

select dbcpu.serie, dbcpu.suc_num, dbmonitores.serie, dbmonitores.suc_num from dbcpu, dbmonitores
where dbcpu.suc_num=dbmonitores.suc_num
and dbcpu.suc_num=’458′

Lo que quiero lograr es saber que equipo tengo en cada una de las sucursales pero al hacer la consulta se me multiplican cada serie de monitor con cada serie de cpu…

S.O.S.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con consulta SQL

Publicado por leonardo_josue (880 intervenciones) el 06/09/2011 17:04:15
Hola David Arteaga:

Lo más probable es que se esté realizando un producto cartesiano entre tus tablas, por lo que debes revisar que todos los campos que estén relacionados se incluyan al momento de definir los JOIN's... en tu post no mencionas cuál es la estructura de tus tablas, pero checa este script de MySQL, creo que muestra un comportamiento similar al tuyo;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
mysql> select * from monitores;
+-----------+------------+----------+-------------+
| idMonitor | idSucursal | idEquipo | descripcion |
+-----------+------------+----------+-------------+
|         1 |          1 |        1 | Monitor 1   |
|         2 |          1 |        2 | Monitor 2   |
|         3 |          2 |        3 | Monitor 3   |
+-----------+------------+----------+-------------+
3 rows in set (0.06 sec)
 
mysql> create table cpus (idCpu int, idSucursal int, idEquipo int,
    -> descripcion varchar(10));
Query OK, 0 rows affected (0.16 sec)
 
mysql> insert into cpus values (1, 1, 1, 'CPU 1'), (2, 1, 2, 'CPU 2'),
    -> (3, 2, 3, 'CPU 3');
Query OK, 3 rows affected (0.08 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select * from cpus;
+-------+------------+----------+-------------+
| idCpu | idSucursal | idEquipo | descripcion |
+-------+------------+----------+-------------+
|     1 |          1 |        1 | CPU 1       |
|     2 |          1 |        2 | CPU 2       |
|     3 |          2 |        3 | CPU 3       |
+-------+------------+----------+-------------+
3 rows in set (0.00 sec)
 
mysql> #Aquí se muestran registros repetidos
mysql> Select M.*, C.descripcion from monitores M inner join cpus C on
    -> M.idSucursal = C.idSucursal where M.idSucursal = 1;
+-----------+------------+----------+-------------+-------------+
| idMonitor | idSucursal | idEquipo | descripcion | descripcion |
+-----------+------------+----------+-------------+-------------+
|         1 |          1 |        1 | Monitor 1   | CPU 1       |
|         2 |          1 |        2 | Monitor 2   | CPU 1       |
|         1 |          1 |        1 | Monitor 1   | CPU 2       |
|         2 |          1 |        2 | Monitor 2   | CPU 2       |
+-----------+------------+----------+-------------+-------------+
4 rows in set (0.00 sec)
 
mysql>#Una ves que en la cláusula ON se incluye también el idEquipo se 
mysql>#eliminan los duplicados ya que en el caso anterior solo se une por idSucursal
mysql> Select M.*, C.descripcion from monitores M inner join cpus C on
    -> M.idSucursal = C.idSucursal and M.idEquipo = C.idEquipo
    -> where M.idSucursal = 1;
+-----------+------------+----------+-------------+-------------+
| idMonitor | idSucursal | idEquipo | descripcion | descripcion |
+-----------+------------+----------+-------------+-------------+
|         1 |          1 |        1 | Monitor 1   | CPU 1       |
|         2 |          1 |        2 | Monitor 2   | CPU 2       |
+-----------+------------+----------+-------------+-------------+
2 rows in set (0.00 sec)


Dale un vistazo para ver si es mas o menos tu escenario, si continuas con problemas postea la estructura de algunas de tus tablas y pon también datos de ejemplo, para poder recrear el escenario y tratar de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar