2012-03-29 3 views
1

Je me dispute avec une requête tirant des valeurs uniques à partir de 3 tables. Est-ce mieux fait dans 2 requêtes séparées?Requête mysql, sélection parmi 3 tables

la requête est à:

count as returned (
all leadID from lds where status = "ok" 
AND leadID is also in rlds with recID="999" 
AND rdate > (03-20-2012) 
+ 
(all distinct leadID from plds where recID="999" 
AND change != NULL 
AND pdate > (03-20-2012)) 

le résultat de la requête de travail devrait être "2": leadID 1 et 4 leadID

Table lds:

leadID | statut
1 | ok
2 | mauvais
3 | ok

plds de table:
leadID | recID | changer | pdate
4 | 999 | ch1 | 03-27-2012
4 | 999 | ch2 | 03-27-2012
5 | 888 | NULL | 03-27-2012

table rlds:
leadID | recID2 | rdate
1 | 999 | 03-27-2012
6 | 999 | 03-27-2012

Merci!

Répondre

1
SELECT Ids.leadId 
FROM 
    Ids JOIN 
    rlds ON rlds.leadId = Ids.LeadId AND recID = 999 AND rdate > '03-20-2012' 
WHERE Ids.Status = 'ok' 

UNION 

SELECT leadId 
FROM pIds 
WHERE recID = 999 AND change IS NOT NULL AND pdate > '03-20-2012' 
+0

Excellent, cela fonctionne - merci! – user1291842

0

Vous pouvez utiliser le mot clé UNION pour récupérer un tableau de 2 rangs, le premier contenant le compte de votre premier match et la seconde le nombre de votre deuxième match.

Vous pouvez ensuite utiliser le mot-clé SUM pour additionner les deux lignes dans une sélection englobante. Le résultat sera une ligne unique contenter votre compte.

SELECT sum(1) 
FROM 
(
SELECT count(1) 
FROM lds 
INNER JOIN rlds ON lds.leadid = plds.leadid 
WHERE lds.status='ok' AND rlds.recid2=999 AND rlds.pdate > '03-20-2012' 

UNION 

SELECT count(1) 
FROM plds 
WHERE plds.recid=999 
AND change != NULL 
AND pdate > '03-20-2012' 
) AS tmpcount