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

Restar subconsultas

Estas en el tema de Restar subconsultas en el foro de Mysql en Foros del Web. Hola, Mi pregunta seria la siguiente, tengo 3 tablas: - candidatura (datos de la candidatura) - cliente (datos del usuario) - candidato (relaciono candidatura con ...
  #1 (permalink)  
Antiguo 20/03/2011, 16:51
Avatar de jservet  
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 0
Pregunta Restar subconsultas

Hola,
Mi pregunta seria la siguiente, tengo 3 tablas:
- candidatura (datos de la candidatura)
- cliente (datos del usuario)
- candidato (relaciono candidatura con cliente -es necesaria porque una candidatura tiene que ser compartida por dos clientes siempre.)

PROBLEMA:

Necesito listar candidaturas que tengan 2 clientes vinculados y ademas que esos 2 clientes esten validados.

Resumiendo seria
SELECT (datos de candidatura)
FROM candidatura, candidato, cliente
WHERE (hayan 2 candidatos con la misma candidatura) AND (ambos candidatos id = cliente id) AND ambos clientes tengan el campo validado a TRUE.

Lo único que consigo hasta ahora es obtener todas las candidaturas que tienen al menos un candidato->cliente validado, eso sí, en el resultado obtengo las candidaturas duplicadas (esas son las correctas, puesto que ambos clientes estan validados) pero tambien obtengo aquellas que tienen almenos uno de ellos.

Gracias de antemano a los que me itenten ayudar. Tengo bastante oxidado el SQL.
  #2 (permalink)  
Antiguo 20/03/2011, 18:48
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: Restar subconsultas

Si puedes poner el codigo de las 3 tablas lo mismo puedo ayudarte, asi no hay quien lo entienda =)

Un saludo!
  #3 (permalink)  
Antiguo 21/03/2011, 03:22
Avatar de jservet  
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 0
Información Respuesta: Restar subconsultas

Ok,
Te explico,

client:
id PK
validated
name
surname
...

VAM_client_candidato:
id
id_cliente
id_candidatura

VAM_client_candidatura:
id_candidatura
nombre_candidatura
candidatura_activate (si tiene 2 personas vinculadas)
puntos
...

la query que te digo que hace casi lo que quiero:

SELECT * FROM VAM_client_candidatura
WHERE VAM_client_candidatura.candidatura_activate = 1 AND VAM_client_candidatura.candidatura_id
IN
( SELECT candidatura
FROM client, VAM_client_candidato
WHERE VAM_client_candidato.candidato = client.id AND client.validated = 1) ORDER BY candidatura_modify desc LIMIT ?, ?

Gracias!
  #4 (permalink)  
Antiguo 21/03/2011, 17:51
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: Restar subconsultas

Perdon por la tardanza.

Esta seria la consulta:

Código MySQL:
Ver original
  1. select t2.* from VAM_client_candidato t1, VAM_client_candidatura t2 where t1.id_candidatura = t2.id_candidatura and t1.id_cliente IN (select id from client where validated = 1) and t2.candidatura_activate = 1;

Un saludo!
  #5 (permalink)  
Antiguo 22/03/2011, 05:01
Avatar de jservet  
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 0
De acuerdo Respuesta: Restar subconsultas

Buenas!
Gracias por la respueta, pero lo que hace esa consulta es devolver candidaturas si tienen al menos un usuario validado vinculado a ellas y yo necesitaba retornar las candidaturas que tuvieran 2 candidatos vinculados y validados.

Pensando me dí cuenta que lo que tenia que hacer era buscar las que no cumplen y devolver las que no se encontraban en este subconjunto!

Pongo la query:
SELECT *
FROM
VAM_client_candidatura
WHERE VAM_client_candidatura.candidatura_activate = 1 AND
VAM_client_candidatura.candidatura_id NOT IN ( SELECT VAM_client_candidato.candidatura
FROM client, VAM_client_candidato
WHERE VAM_client_candidato.candidato = client.id AND client.validated = 0) ORDER BY candidatura_modify

Arreglado!!!!!
Gracias por responder!

Etiquetas: agrupados., campos, devolver, repetidos
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 13:39.