只需获得与多对多关系中所有指定条件匹配的记录。 大大简化的表格看起来像
Catalog Catalog_Types Types
1 1 1 1
2 1 2 2
3 2 1 3
2 3 4
2 4
3 1
3 4
很容易从目录中选择1种类型,但我需要选择1个以上,例如如何从目录中获取只有那些拥有类型 1 和 2,所以如果它有1但没有2则不合适。
我在这里看到了类似的问题和决定,但对于SQL。除了之外,我试图在mySQL上用equals替换它,但我不太了解mySQL。
提前谢谢你, 抱歉我的英文
答案 0 :(得分:0)
此类查询称为“set in set”
如果要获取具有两种类型(1和2)但可能具有其他类型的目录ID
SELECT catalog_id
FROM catalog_type
WHERE type_id IN (1, 2)
GROUP BY catalog_id
HAVING COUNT(DISTINCT type_id) = 2
如果想确保使用两种类型(例如1和2)
获取目录IDSELECT catalog_id
FROM catalog_type
GROUP BY catalog_id
HAVING SUM(type_id = 1) > 0
AND SUM(type_id = 2) > 0
AND COUNT(DISTINCT type_id) = 2;
如果您想获取三种类型中的至少两种(例如1,2,4)的目录ID
SELECT catalog_id
FROM catalog_type
WHERE type_id IN (1, 2)
GROUP BY catalog_id
HAVING (MAX(type_id = 1)
+ MAX(type_id = 2)
+ MAX(type_id = 4)) >= 2
假设您在catalog_type
| CATALOG_ID | TYPE_ID | ------------------------ | 1 | 1 | | 1 | 2 | | 2 | 1 | | 2 | 3 | | 2 | 4 | | 3 | 1 | | 3 | 2 | | 3 | 4 |
上述查询的示例输出:
query 1 query 2 query 3 | CATALOG_ID | | CATALOG_ID | | CATALOG_ID | -------------- -------------- -------------- | 1 | | 1 | | 1 | | 3 | | 3 |
以下是所有这些查询的 SQLFiddle 演示。看看结果如何不同。