2011-10-08 83 views
-1

這是我的查詢:查詢給出重複結果?

SELECT b.id,b.body FROM btin b 
INNER JOIN nwork n ON (n.mem_id = b.mem_id) 
WHERE b.parentid = '0' 
AND ('401' IN (n.frd_id, b.mem_id)) 
ORDER BY b.date DESC 
LIMIT 20 OFFSET 0 

的問題是它的印刷重複的結果。 如何優化這一

請幫助 感謝

回答

1

三種方式來解決這個(基本上你有nwork超過1行):

SELECT distinct b.id,b.body FROM btin b 
INNER JOIN nwork n ON (n.mem_id = b.mem_id) 
WHERE b.parentid = '0' 
AND ('401' IN (n.frd_id, b.mem_id)) 
ORDER BY b.date DESC 
LIMIT 20 OFFSET 0 


SELECT b.id,b.body 
FROM btin b 
Where b.id in (SELECT b.id FROM btin b INNER JOIN nwork n ON (n.mem_id = b.mem_id) 
       WHERE b.parentid = '0' AND ('401' IN (n.frd_id, b.mem_id))) 
ORDER BY b.date DESC 
LIMIT 20 OFFSET 0 

SELECT b.id,b.body FROM btin b 
INNER JOIN nwork n ON (n.mem_id = b.mem_id) 
WHERE b.parentid = '0' 
AND ('401' IN (n.frd_id, b.mem_id)) 
Group by b.id, b.body, b.date 
ORDER BY b.date DESC 
LIMIT 20 OFFSET 0 
0

如果你嘗試:

SELECT DISTINCT b.id,b.body FROM btin b 
.... 

會發生什麼?

0

嘗試要麼

SELECT DISTINCT ....... 

OR

SELECT b.id,b.body FROM btin b 
INNER JOIN nwork n ON (n.mem_id = b.mem_id) 
WHERE b.parentid = '0' 
AND ('401' IN (n.frd_id, b.mem_id)) 
GROUP BY b.id 
ORDER BY b.date DESC 
LIMIT 20 OFFSET 0 
+0

感謝man'arif'現在我的查詢運行異常快 – Sparkx

0

使用GROUP BY而不是:

SELECT b.id,b.body FROM btin b 
INNER JOIN nwork n ON (n.mem_id = b.mem_id) 
WHERE b.parentid = '0' 
AND ('401' IN (n.frd_id, b.mem_id)) 
GROUP BY b.id 
ORDER BY b.date DESC 
LIMIT 20 OFFSET 0