Oracle - Se repiten los datos en un campo cuando genero consulta

 
Vista:

Se repiten los datos en un campo cuando genero consulta

Publicado por Mateo gomez (7 intervenciones) el 05/03/2019 16:56:07
Buen día, tengo un inconveniente con la siguiente consulta:

select s.servciudad, i.provedorid, i.ubicacion, i.distribuidor, s.telefono from servidor s
left join ubicacion i on s.servidist = i.ubidist and s.serviprov = i.ubiprov
where s.servciudad = 50001000
and s.servestado = 1;

Realice esta consulta en donde le solicito a la BD que me traiga el codigo de ciudad el nombre de su provedor, distribuidor y su ubicacion (la cual es unica), ademas le digo que me traiga el numero telefonico de cada ubicacion, pero para las ubicaciones que no tienen ningun numero telefonico me estarepitiendo el numero telefonico, cuando no puede ser posible que el mismo numero telefonico este en muchas ubicaciones, es posible que la ciudad se repita y que la ubicacion tenga el mismo distribuidor pero el numero telefonico no, intente con el left join y el error persiste, no se si conozcan algun otro metodo para que aparezca vacio el campo "Telefono", cuando la "Ubicacion" no tiene telefono, agaradezco su ayuda para solucionar este inconveniente.

esta es la impresion:

Ciudad Prove Ubicacion Distribuidor Telefono
50001000 14 11788-HU010439 230011788 86644182
50001000 14 11788-HU010440 230011788 86644182
50001000 14 11788-HU010441 230011788 86644182
50001000 14 11788-HU010442 230011788 86644182
50001000 14 11788-HU010443 230011788 86644182
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
Imágen de perfil de gilman
Val: 117
Bronce
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Se repiten los datos en un campo cuando genero consulta

Publicado por gilman (52 intervenciones) el 06/03/2019 08:28:52
Es lógico, estás cojiendo el telefono del distribuidor, y por lo tanto será único independientemente de la ubicación, deberías cojer el telefono de la tabla de ubicaciónes, si existe el campo.
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

Se repiten los datos en un campo cuando genero consulta

Publicado por Mateo gomez (7 intervenciones) el 06/03/2019 14:43:35
No, el numero telefonico solo lo tengo en la tabla Servidor, allí tambien tengo el numero telefonico con su respectiva ubicacion pero no llamo ubicacion de la tabla servidor ya que lo que quiero es que aparte que me traiga las ubicaciones que tienen numero telefonico, necesito que tambien me traiga las ubicaciones que no tienen numero telefonico.
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
Imágen de perfil de gilman
Val: 117
Bronce
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Se repiten los datos en un campo cuando genero consulta

Publicado por gilman (52 intervenciones) el 06/03/2019 15:17:43
Vamos a ver, creo que me he esplicado claramente, pero voy a intentar dejarlo mas claro.
En tu consulta devuelves el campo s.telefono y s en tu consulta es el alias de la tabla servidor consecuentemente te devuelve el teléfono de cada servidor, por eso siempre es el mismo (para cada servidor), entiendo que lo que quieres es el teléfono de cada ubicación, y siendo i el alias de la tabla ubicacion, y salvo que el nombre sea otro, deberías devolver el campo i.telefono que es el que debería tener el teléfono de cada ubicación, si es que lo tiene.
Si no es así, deberías aclarar mejor cual es la estructura de tu base de datos, pues con la información que das no es posible sacar la suficiente información para dar con la solución al problema.
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

Se repiten los datos en un campo cuando genero consulta

Publicado por Mateo gomez (7 intervenciones) el 06/03/2019 16:07:34
Los campos que tiene la tabla "SERVIDOR" son:

servciudad = Codigo de Ciudad
serviprov = codigo de Provedor
servidist = codigo de Distribuidor
serviubicacion = codigo de la ubicacion
telefono = Numero Telefonico

Los campos de la tabla "UBICACION" son:

ubiprov = codigo provedor
ubidist = codigo distribuidor
ubicacion = codigo de ubicacion

genere la consulta:

select s.servciudad, i.ubiprov, i.ubicacion, i.ubidist, s.telefono from servidor s
left join ubicacion i on s.servidist = i.ubidist and s.serviprov = i.ubiprov
where s.servciudad = 50001000;

Por que genero el cruce con la tabla ubicación, porque requiero que me muestre que ubicaciones no tienen numero telefonico tambien y adicional me muestre las que si tienen numero telefonico, ya que la tabla "SERVIDOR" solo tiene las ubicaciones que tienen numero telefonico.

Quisiera que la respueste me saliera asi:

Ciudad | Prove | Ubicacion |Distribuidor |Telefono
50001000 | 14 | 11788-HU010439 | 230011788 | 86644182
50001000 | 14 | 11788-HU010440 | 230011788 | Null
50001000 | 14 | 11788-HU010441 | 230011788 | 86644224
50001000 | 14 | 11788-HU010442 | 230011788 | Null
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
Imágen de perfil de gilman
Val: 117
Bronce
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Se repiten los datos en un campo cuando genero consulta

Publicado por gilman (52 intervenciones) el 08/03/2019 10:13:50
Perdona la tardanza en responder, pero he andado algo liado, si no me equivoco lo que buscas es esto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT s.servciudad,
       i.provedorid,
       i.ubicacion,
       i.distribuidor,
       s.telefono
  FROM servidor s
       LEFT JOIN ubicacion i
          ON s.servidist = i.ubidist AND s.serviprov = i.ubiprov
 WHERE s.servciudad = 50001000 AND s.servestado = 1
UNION
--INCLUIR AQELLAS UBICACIONES QUE NO TIENEN ASOCIADO UN SERVIDOR
SELECT NULL servciudad,  --No conocemos el servidor luego no sabemos la ciudad
                         --se podría poner tambien 50001000
       i.provedorid,
       i.ubicacion,
       i.distribuidor,
       NULL telefono
  FROM ubicacion i
 WHERE (i.ubidist, i.ubiprov) NOT IN (SELECT s.servidist, s.serviprov
                                        FROM servidor s)
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