从关系记录 Table 动态查询 Select 多个条目
Dynamic Query to Select Multiple Entries from a Relational Record Table
假设我有一个 table 存储产品与其类别之间的关系:
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
虽然这实现了我想要的,但它并不实用,因为我的查询将是动态的。如果我必须 select 具有 3 个类别的产品,这需要在查询中进行艰难的更改。
有没有更简洁、更聪明的方法来实现这一点?我想象的是 select 首先设置的东西,然后根据需要的级别数量用另一个类别进行优化。
对于这样的事情,你应该使用 IN 或 Between。您可以动态创建您在 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
假设我有一个 table 存储产品与其类别之间的关系:
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
虽然这实现了我想要的,但它并不实用,因为我的查询将是动态的。如果我必须 select 具有 3 个类别的产品,这需要在查询中进行艰难的更改。
有没有更简洁、更聪明的方法来实现这一点?我想象的是 select 首先设置的东西,然后根据需要的级别数量用另一个类别进行优化。
对于这样的事情,你应该使用 IN 或 Between。您可以动态创建您在 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