2011-02-10 72 views
0

我有一個關於查詢,我想只顯示數據,其中的一個子查詢的數量必須大於0MySQL的子查詢作爲標準

我有這樣的SQL查詢的一個問題:

SELECT 
    t.id   AS t__id, 
    t.state_code AS t__state_code, 
    t.number  AS t__number, 
    t.meta   AS t__meta, 
    t.date_created AS t__date_created, 
    (SELECT 
    COUNT(t2.id) AS t2__0 
    FROM tbl_messages t2 
    LEFT JOIN tbl_services t3 
     ON t2.service_id = t3.id 
    WHERE (t2.inbound_time BETWEEN "2011-01-31 16:00:00" 
      AND "2011-02-28 15:59:59" 
      AND t2.subscriber = t.number 
      AND t3.pool_id = 48)) AS t__0 
FROM tbl_subscribers t 
WHERE (TRUE) 
ORDER BY t__0 DESC 
LIMIT 100; 

我想只顯示t__0> 0的數據......我如何在這個查詢中應用它?

我想這查詢,但它不工作:

SELECT 
    t.id   AS t__id, 
    t.state_code AS t__state_code, 
    t.number  AS t__number, 
    t.meta   AS t__meta, 
    t.date_created AS t__date_created, 
    (SELECT 
    COUNT(t2.id) AS t2__0 
    FROM tbl_messages t2 
    LEFT JOIN tbl_services t3 
     ON t2.service_id = t3.id 
    WHERE (t2.inbound_time BETWEEN "2011-01-31 16:00:00" 
      AND "2011-02-28 15:59:59" 
      AND t2.subscriber = t.number 
      AND t3.pool_id = 48)) AS t__0 
FROM tbl_subscribers t 
WHERE (t__0 > 0) 
ORDER BY t__0 DESC 
LIMIT 100 

;

它返回一個錯誤:

Query : SELECT t.id   AS t__id, t.state_code AS t__state_code, t.number  AS t__number, t.meta   AS t__m... 
Error Code : 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'having t__0 > 0 
LIMIT 100' at line 19 
Execution Time : 00:00:00:000 
Transfer Time : 00:00:00:000 
Total Time  : 00:00:00:000 

回答

0

試試這個:

SELECT 
    t.id   AS t__id, 
    t.state_code AS t__state_code, 
    t.number  AS t__number, 
    t.meta   AS t__meta, 
    t.date_created AS t__date_created, 
    COUNT(t2.id) AS t__0 
FROM tbl_subscribers t 
JOIN tbl_messages t2 ON t2.subscriber = t.number 
LEFT JOIN tbl_services t3 ON t2.service_id = t3.id 
WHERE t2.inbound_time BETWEEN "2011-01-31 16:00:00" 
     AND "2011-02-28 15:59:59" 
     AND t3.pool_id = 48 
GROUP BY t.id, t.state_code, t.number, t.meta, t.date_created 
HAVING COUNT(t2.id) > 0 
ORDER BY t__0 DESC 
LIMIT 100 
+0

這解決了問題。但是如果有的話我碰到一個場景,我必須使用子查詢的結果作爲主查詢條件中的條件的基礎,該怎麼做? – 2011-02-10 08:21:42