2016-01-28 122 views
0

选择多个条目比方说,我有一个存储产品及其类别之间的关系表:动态查询从关联记录表

p_id | c_id 
-----+----- 
    1 | 1 
    1 | 2 
    2 | 1 
    2 | 2 
    2 | 3 
    3 | 2 

正如你所看到的,一个产品可能有多个类别。如何搜索分配了类别1和类别2的产品?我能想到的最接近的是使用JOIN:

SELECT a.p_id 
FROM rel_table a 
JOIN rel table b 
    ON a.p_id=b.p_id AND b.c_id=2 
WHERE a.c_id=1 

虽然这实现了我想要的东西,这是不实际的,因为我的查询将是动态的。如果我必须选择具有3个类别的产品,则这需要查询中的困难更改。

有没有更清洁,更聪明的方法来实现这一目标?我想象一下,选择第一套,然后再用另一个类别提炼所需水平的数量。

回答

1

您应该使用IN或之间的这种事情。您可以动态地在IN/BETWEEN

SELECT a.p_id 
FROM rel_table a 
WHERE a.c_id IN (1,2,3) 
group by a.p_id 
having count(1) = 3 
order by a.p_id asc 

SELECT a.p_id 
FROM rel_table a 
WHERE a.c_id between 1 and 3 
group by a.p_id 
having count(1) = 3 
order by a.p_id asc 
+0

编辑创建你把值。请看一看! –

+0

完美,非常感谢!非常聪明的想法 – sidyll

+0

我可以接受你的答案在40秒内正确 – sidyll