2014-02-05 98 views
0

我有一個領域MySQL查詢返回相關行

node_id 
topic_id 
ref_id 

REF_ID的指實際的對象存儲簡單的MySQL表ref_table。可能有任意數量的具有相同ref_id的行,以及不同的node_id和topic_id組合。 我現在需要檢索記錄(node_id,ref_id = A)存在的所有不同的node_id值,受限於記錄存在的約定(NODE_ID,TOPIC_ID,ref_id = A) - 其中NO​​DE_ID和TOPIC_ID是我的可變參數。 換句話說,我試圖找到所有具有NODE_ID和TOPIC_ID的特定組合的對象,然後返回此對象出現的所有節點。看起來很簡單,但我無法圍繞查詢語法來做這件事。如果查詢本身返回NODE_ID,那麼也可以。

如果查詢可能返回node_id列表以及node_id匹配的次數,那將會更好。

+0

你能否提供一些示例數據和預期的效果? –

回答

1

試試這個:

SELECT r2.node_id, COUNT(*) AS c 
FROM ref_table r1 
    INNER JOIN ref_table r2 ON r1.ref_id = r2.ref_id 
WHERE r1.node_id = [node] 
    AND r1.topic_id = [topic] 
GROUP BY r2.node_id; 
+0

謝謝,它看起來像那樣的作品。同時,我自己想出了一個不同的解決方案(見下文)。比另一個更有效率嗎? – plantrob

+0

上面的查詢幾乎肯定會更快,因爲它不涉及子查詢。但是,嘗試將它們運行並觀察結果。 –

0

這工作:

select node_id, count(*) as c from ref_table 
where topic_id=[topic] 
and node_id in (select distinct node_id from ref_table where node_id=[node] and topic_id=[topic]) 
group by node_id;