2012-03-29 46 views
1

我與查詢拉動3個表中的唯一值進行爭吵。這是更好地完成在2個單獨的查詢?mysql查詢,從3個表中進行選擇

查詢是:

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)) 

工作查詢的結果應該是 「2」:leadID 1和leadID 4

表LDS:

leadID |狀態
1 |好吧
2 |不好
3 |好吧

表plds:
leadID | recID |改變| pdate
4 | 999 | ch1 | 03-27-2012
4 | 999 | ch2 | 03-27-2012
5 | 888 | NULL | 03-27-2012

表格地址:
leadID | recID2 | rdate
1 | 999 | 03-27-2012
6 | 999 | 03-27-2012

謝謝!

回答

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

優秀的,這個作品 - 謝謝! – user1291842 2012-03-29 23:34:32

0

您可以使用UNION關鍵字中檢索一個陣列中的2行,第一個包含您的第一場比賽的數量和你的第二個比賽的Seconde系列計數。

然後,您可以使用SUM關鍵字將封閉選擇中的兩行完全相加。結果將是一個單一的行計數你的數量。

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