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

La subconsulta de una sola fila devuelve más de una fila

Estas en el tema de La subconsulta de una sola fila devuelve más de una fila en el foro de Oracle en Foros del Web. Buenas! Hago esta SELECT, y me da el error que he puesto en el titulo: SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE LIKE (SELECT DNI FROM ...
  #1 (permalink)  
Antiguo 25/05/2010, 04:06
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 13 años, 3 meses
Puntos: 1
La subconsulta de una sola fila devuelve más de una fila

Buenas!
Hago esta SELECT, y me da el error que he puesto en el titulo:

SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE LIKE (SELECT DNI FROM CLIENTE) ;

La historia es que hay mas de un DNI, y yo quiero que aparezcan los REF_COCINA que corresponden a cada DNI. Alguien sabria decirme que es lo que hago mal?

Gracias de antemano.
Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #2 (permalink)  
Antiguo 25/05/2010, 06:41
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 12 años, 5 meses
Puntos: 360
Respuesta: La subconsulta de una sola fila devuelve más de una fila

Código sql:
Ver original
  1. SELECT ref_cocina FROM comprar WHERE dni_cliente IN (SELECT dni FROM cliente) ;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/05/2010, 07:31
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: La subconsulta de una sola fila devuelve más de una fila

Buenas!
Gracias por la respuesta huesos, asi si que funciona.
Ahora tengo una ultima pregunta, y dejo de dar la brasa ya con las consultas.

La consulta que tengo que hacer es: "Sacar el nombre y apellido del montador que mas cocinas ha montado a clientes de Bilbao".

Tengo las siguientes tablas:

CLIENTE (DNI,NOMBRE,CALLE,CIUDAD,TLF)
COMPRAR (REF_COCINA,DNI_CLIENTE,FECHA_COMPRA)

COCINA (REF,DESCRIPCION,CANTIDAD_MUEBLE_FECHA_VENTA,COD_DISTR )

MONTAR (REF_COCINA,NIF_MONTADOR)
MONTADOR (NIF,NOMBRE,TLF)

Con la siguiente consulta:

SELECT NIF_MONTADOR,COUNT(NIF_MONTADOR) FROM(SELECT NIF_MONTADOR FROM MONTAR WHERE REF_COCINA IN (SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE IN (SELECT DNI FROM CLIENTE WHERE CIUDAD='Bilbao'))) GROUP BY NIF_MONTADOR ORDER BY COUNT(NIF_MONTADOR) DESC;

consigo sacar el NIF de cada montador que ha montado alguna cocina a algun cliente de Bilbao, y cuantas cocinas ha montado.
Pero no consigo sacar el NOMBRE y el TLF del montador.

Si me pudieseis ayudar, os lo agradeceria, ya que si consigo hacer esto, termino ya con el trabajo que tengo que hacer de SQL.

Muchas gracias.
Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #4 (permalink)  
Antiguo 25/05/2010, 07:46
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 12 años, 7 meses
Puntos: 31
De acuerdo Respuesta: La subconsulta de una sola fila devuelve más de una fila

Sin poder probar es un poco dificil, pero tendrás que utilizar un inner join y cruzar contra la tabla de MONTADOR y en el ON comparas los nifs que sean iguales, asi sacas el nombre.

No se si te funcionará pero espero que te de una idea.

Código:
SELECT A.NIF_MONTADOR,B.NOMBRE,COUNT(NIF_MONTADOR) FROM
((
SELECT NIF_MONTADOR 
FROM 
MONTAR 
WHERE 
REF_COCINA IN (SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE IN (SELECT DNI FROM CLIENTE WHERE CIUDAD='Bilbao'))
) A
INNER JOIN 
(
SELECT NIF,NOMBRE FROM MONTADOR
) B
ON A.NIF_MONTADOR = B.NIF) tabla GROUP BY A.NIF_MONTADOR,B.NOMBRE ORDER BY COUNT(A.NIF_MONTADOR) DESC;
salu2
__________________
La nueva red social de quinielas quiniela resultados
Cazaresultados Futbol base en directo
  #5 (permalink)  
Antiguo 25/05/2010, 08:17
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: La subconsulta de una sola fila devuelve más de una fila

Buenas triqui, gracias por la respuesta.
Te comento, la cosa es que no conozco el inner join, nunca lo he utilizado, por lo que no se como funciona.
He probado lo que me has puesto, y me da error:
ORA-00933: comando SQL no terminado correctamente

No se si sabras porque puede ser. Otra cosa, al final has puesto, antes del GROUP BY, tabla. Que tabla tiene que ser?
Gracias otra vez por la ayuda.
Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #6 (permalink)  
Antiguo 25/05/2010, 10:09
Avatar de plantala  
Fecha de Ingreso: abril-2008
Ubicación: Jamaica
Mensajes: 176
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: La subconsulta de una sola fila devuelve más de una fila

Buenas!
Por fin he conseguido hacer la consulta. Puede que haya quedado un poco lioso, pero por lo menos sale, que es lo que importa. Muchas gracias a los que me habeis ayudado. Aqui os dejo el resultado:

SELECT NOMBRE,TLF FROM MONTADOR WHERE NIF=(SELECT NIF_MONTADOR FROM (SELECT NOMBRE,NIF_MONTADOR FROM(SELECT A.NIF_MONTADOR,B.NOMBRE,COUNT(NIF_MONTADOR) FROM
((
SELECT NIF_MONTADOR
FROM
MONTAR
WHERE
REF_COCINA IN (SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE IN (SELECT DNI FROM CLIENTE WHERE CIUDAD='Barakaldo'))
) A
INNER JOIN
(
SELECT NIF,NOMBRE FROM MONTADOR
) B
ON A.NIF_MONTADOR = B.NIF) GROUP BY A.NIF_MONTADOR,B.NOMBRE ORDER BY COUNT(A.NIF_MONTADOR) DESC) WHERE ROWNUM<=1));

Un saludo!
__________________
"Independizate de la esclavitud mental; tan solo nosotros mismos podemos liberar nuestra mente"-Bob Marley
  #7 (permalink)  
Antiguo 25/05/2010, 11:13
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: La subconsulta de una sola fila devuelve más de una fila

__________________
La nueva red social de quinielas quiniela resultados
Cazaresultados Futbol base en directo
  #8 (permalink)  
Antiguo 26/05/2010, 05:17
 
Fecha de Ingreso: julio-2009
Mensajes: 103
Antigüedad: 12 años
Puntos: 1
Respuesta: La subconsulta de una sola fila devuelve más de una fila

Me alegro que lo solucionaras, si te quedo la duda

Código SQL:
Ver original
  1. SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE LIKE (SELECT DNI FROM CLIENTE) ;
  2. SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE IN (SELECT DNI FROM CLIENTE) ;

In sirve para buscar más de un resultado, tenlo en cuenta, "=" haría el mismo efecto que like en tu caso pero la consulta con IN consumirá mucho más (para hacer software hay que tenerlo en cuenta) te digo esto para que lo tengas más claro y queda mejor usar = o like siempre que puedas ;) mejor que los in.

PD: Solo quería explicarte que son comparadores distintos, ya se que te respondieron
  #9 (permalink)  
Antiguo 26/05/2010, 07:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 12 años, 5 meses
Puntos: 360
Respuesta: La subconsulta de una sola fila devuelve más de una fila

Cita:
Iniciado por juanla Ver Mensaje
Me alegro que lo solucionaras, si te quedo la duda

Código SQL:
Ver original
  1. SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE LIKE (SELECT DNI FROM CLIENTE) ;
  2. SELECT REF_COCINA FROM COMPRAR WHERE DNI_CLIENTE IN (SELECT DNI FROM CLIENTE) ;

IN sirve para buscar más de un resultado, tenlo en cuenta, "=" haría el mismo efecto que like en tu caso pero la consulta con IN consumirá mucho más (para hacer software hay que tenerlo en cuenta) te digo esto para que lo tengas más claro y queda mejor usar = o like siempre que puedas ;) mejor que los in.

PD: Solo quería explicarte que son comparadores distintos, ya se que te respondieron
Juanla... si no estoy mal, el problema de plantala era que el campo a comparar, debía hacerlo ante múltiples valores y esto no es posible ni con el operador like ni =, ya que se viola la estructura cartesiana de la tabla al tener un numero de registros superior a 1 haciendo imposible comparar de este modo con un conjunto de registros.

El operador IN tiene el mismo comportamiento que si se hiciesen múltiples comparaciones con OR. Por eso en este caso, creo que es necesario.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 27/05/2010, 09:11
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 14 años, 1 mes
Puntos: 43
Respuesta: La subconsulta de una sola fila devuelve más de una fila

Cita:
Iniciado por huesos52 Ver Mensaje
Juanla... si no estoy mal, el problema de plantala era que el campo a comparar, debía hacerlo ante múltiples valores y esto no es posible ni con el operador like ni =, ya que se viola la estructura cartesiana de la tabla al tener un numero de registros superior a 1 haciendo imposible comparar de este modo con un conjunto de registros.

El operador IN tiene el mismo comportamiento que si se hiciesen múltiples comparaciones con OR. Por eso en este caso, creo que es necesario.

saludos

Etiquetas: fila, subconsulta
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 03:47.