【发布时间】:2017-08-15 18:15:48
【问题描述】:
我有一个映射多对多关系的 MySQL 数据库表。数据库表包含两列,它们是来自其他表的外键。所以这个数据库表只存在于将表A的外键分配给表B的外键。
表格的结构
第 1 列:条件 ID (int11)(外键) 第 2 列:packageID (int11)(外键)
CREATE TABLE `many_to_many_table` (
`conditionID` int(11) NOT NULL,
`packageID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `many_to_many_table`
ADD KEY `conditionID` (`conditionID`,`packageID`);
我想知道是否存在此表中的组合。例如,用户具有 ID 1、2 和 3 的条件。对于这些 ID,ID 为 1 的包已经存在。条目是 1 | 1, 1 | 2 和 1 | 3.
样本数据
INSERT INTO `many_to_many_table` (`conditionID`, `packageID`) VALUES
(1, 195), (2, 195), (3, 195), (4, 197), (5, 197), (5, 209), (6, 198), (6, 211), (6, 219), (6, 220);
使用此示例数据,查询应返回 packageID 195。
我尝试了以下方法:
SELECT
packageID,
conditionID,
(
SELECT
COUNT(*)
FROM
many_to_many_table
WHERE
conditionID IN (1,2,3)
) AS rowCount
FROM
many_to_many_table
GROUP BY
packageID
HAVING
conditionID IN (1,2,3)
AND
rowCount = 3
这在一开始效果很好。但它会选择只有 conditionID 1 或 conditionID 2 和不同 packageID 的条目。此查询不够精确,无法获取重复项。
这可以通过一个查询来实现吗?
【问题讨论】:
-
所以你有一定的条件ID序列,你想知道是否有一个包ID与所有这些条件ID配对?这样的 packageID 是否可能与一些不同的 conditionID 配对?
-
是的。我想知道是否有包含所有这些条件 ID 的 packageID。不可能有相同的 packageID 和不同的 conditionID。
-
感谢您的建议,@Strawberry。我添加了 CREATE 语句和示例数据。
-
酷。剩下的呢?