Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-05-2012
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Consultar el mismo campo varios valores

Hola a todos, quiero pedirles su ayuda, tengo dos tablas, una padre y su hija (pedidos y detalle de pedidos), necesito con SQL consultar cuáles pedidos tienen la condición de estar requiriendo dos o más productos de códigos específicos. Me explico mejor con un ejemplo:

Cita:
Pedido DetPedido
------- -----------------------
pedIdPed dpdIdPed dpdIdProducto
101 101 gafas
101 101 camiseta

102 102 gafas
102 102 gorra
102 102 pantaloneta

103 103 camiseta
103 103 medias
103 103 gafas
Código SQL [-]
SELECT pedIdPed 
FROM Pedido, DetPedido
WHERE pedIdPed = pdpIdPed AND (dpdIdProducto = 'gafas' AND dpdIdProducto = 'camiseta')
Al hacerlo así no me devuelve filas, cuando cambio AND por OR en la pregunta del producto, me devuelve todas las filas, pero necesito es que el resultado de esa consulta sea: 101 y 103

Alguna idea ...

Gracias

Última edición por gustavosv fecha: 19-05-2012 a las 20:02:00.
Responder Con Cita
  #2  
Antiguo 20-05-2012
Avatar de champy
champy champy is offline
Miembro
 
Registrado: sep 2003
Ubicación: Alicante, España
Posts: 75
Poder: 21
champy Va por buen camino
No estoy muy seguro de entender la pregunta.

Lo que tu quieres es encontrar el número de pedido que contiene TODOS los artículos que pasas en la condición?

Es decir... Dame aquel Nº de pedido en el que se están pidiendo unas gafas y tambien se está pidiendo una camiseta.

¿Es esa la idea? ¿Qué tal algo como esto?

Código SQL [-]
SELECT DetPedido.pedIdPed 
FROM DetPedido INNER JOIN DetPedido Detpedido2 on (DetPedido.pedIdPed=DetPedido2.pedIdPed)
WHERE 
        pedIdPed.dpdIdProducto   = 'gafas' 
AND  pedIdPed2.dpdIdProducto = 'camiseta'

No estoy 100% seguro de que la manera de enlazar la tabla consigo misma sea correcta, que alguien me corrija si no es así =)
Responder Con Cita
  #3  
Antiguo 17-10-2014
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
SELECT para encontrar registros con diferentes valores en el mismo campo

Hola, para empezar, no se si el título realmente describa mi inquietud, pero bueno ...

Tengo una tabla que contiene el detalle de los pedidos con una estructura Consecutivo, NroPedido, IdProducto, Cantidad, ... un Pedido puede tener diferentes productos:

Consecutivo NroPedido IdProducto Cantidad
1 101 TORNILLO 1
2 101 TUERCA 2
3 101 BUJE 1

4 102 TUERCA 1
5 102 BOMBILLO 1

6 103 TORNILLO 5
7 103 BUJE 3
8 103 ARANDELA 5

Necesito encontrar los pedidos que contengan p.ej: TORNILLO Y TUERCA, es decir el 101

Cómo se construye ese SELECT ...?

Gracias !
Responder Con Cita
  #4  
Antiguo 17-10-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No soy el más indicado, pero, ¿algo así es lo que estás buscando?

Código SQL [-]
SELECT * FROM NombreTabla WHERE (NroPedido = 101)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 17-10-2014
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Hola dec, no me serviría porque necesito preguntar por el Producto, es decir no conozco cuales Pedidos tienen los 2 productos (de acuerdo al ejemplo).

Había intentado lo siguiente:
Código SQL [-]
SELECT * FROM NombreTabla
WHERE (IdProducto = 'TORNILLO') OR (IdProducto = 'TUERCA')

pero evidentemente el resultado son los Pedidos que tienen el Producto TORNILLO 'o' el Producto TUERCA, según el ejemplo serían el 101, 102 y 103, y lo que necesito son los Pedidos que tienen AMBOS Productos, el 101.

Ahora, si en lugar de OR utilizo AND, siempre será un resultado vacio ya que ningún Producto podría llamarse al mismo tiempo TORNILLO Y TUERCA.
Responder Con Cita
  #6  
Antiguo 17-10-2014
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Menos indicado yo!!!

Código:
SELECT * FROM NombreTabla
WHERE (IdProducto = 'TORNILLO') AND (IdProducto = 'TUERCA')
GROUP BY NroPedido
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
Responder Con Cita
  #7  
Antiguo 17-10-2014
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Se me ocurre esto, pero no sé si sirva:

Código SQL [-]
select NroPedido from pedidos p
where
  'Tornillo' in (select distinct IdProducto from pedidos q where q.NroPedido = p.NroPedido) and
  'Tuerca' in (select distinct IdProducto from pedidos q where q.NroPedido = p.NroPedido)

// Saludos
Responder Con Cita
  #8  
Antiguo 17-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gustavosv.

Otra opción:
Código SQL [-]
SELECT T1.NROPEDIDO
FROM TABLA T1
WHERE T1.IDPRODUCTO = :IDPROD1
AND EXISTS (SELECT IDPRODUCTO FROM TEST T2
            WHERE T2.NROPEDIDO = T1.NROPEDIDO AND T2.IDPRODUCTO = :IDPROD2)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 17-10-2014
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
Usando Having

Creo que esto funcionaría :

Código SQL [-]
select R1.NROPEDIDO
  from DETPEDIDO R1
  where R1.IDPRODUCTO in ('TORNILLO', 'TUERCA')
  group by R1.NROPEDIDO
  having Count(*) >= 2; -- 2 es elnumero de diferentes idProducto buscados

También se me ocurrió esto otro, que es un poco más rebuscado, pero en ciertas situaciones puede darnos algo de flexibilidad adicional, siempre y cuando nuestro motor de bases de datos pueda realizar consultas CTE (common-table-expresion) (por lo menos Firebird, Sql Server y db2 pueden):

Código SQL [-]
with R1 as (
  select NROPEDIDO
    from DETPEDIDO 
    where IDPRODUCTO = 'TORNILLO'),
R2 as (
  select NROPEDIDO
     from DETPEDIDO
     where IDPRODUCTO = 'TUERCA'
)
select R1.NROPEDIDO
  from R1
  inner join R2
      on R1.NROPEDIDO = R2.NROPEDIDO;
Responder Con Cita
  #10  
Antiguo 17-10-2014
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
LISTO !!!

Muchas gracias a todos por sus respuestas y mis respetos.

Me funcionaron perfecto las ideas de Roman y Ecfisa, la una va más rápido que la otra pero se obtiene el mismo resultado correcto, la primera de Orodriguezca la probé y no me funcionó ya que el resultado es como si usara mi opción de OR, bueno en últimas para eso es IN, y la segunda no trabajó en MySQL.

De nuevo gracias por su ayuda !

GustavoSV
Responder Con Cita
  #11  
Antiguo 17-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gustavosv.

Habías publicado dos hilos con el mismo contenido. Para evitar dispersar resultados en las búsquedas, combiné ambos en este.

Si ves que tu hilo inicial no ha tenido respuestas no crees otro tema, publica un nuevo mensaje en el original y pasará a encabezar la lista nuevamente.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 17-10-2014
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Listo, tienes razón, gracias !

Solo que el anterior hilo lo había puesto hace más de 2 años y la verdad no me acordaba de él.
Responder Con Cita
  #13  
Antiguo 17-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por gustavosv Ver Mensaje
Listo, tienes razón, gracias !

Solo que el anterior hilo lo había puesto hace más de 2 años y la verdad no me acordaba de él.
El detalle de la fecha se me pasó...

Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo puedo hacer para que una variable valga 2 valores al mismo tiempo wlad Internet 15 19-12-2007 19:06:03
Porque me marca error en mis querys si utilizo el mismo para diferentes consultas zcatzz SQL 7 27-01-2007 14:10:37
Recorrer todos los registros de una tabla que tengan el mismo campo Sayuri Conexión con bases de datos 3 08-12-2005 17:07:46
Campo de tabla con valores con un mismo nombre kakesoft Conexión con bases de datos 14 28-11-2005 15:40:46


La franja horaria es GMT +2. Ahora son las 12:31:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi