2014-02-05 80 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;