gpt4 book ai didi

php - 在多对多关系中查找重复项

转载 作者:行者123 更新时间:2023-11-29 01:50:28 25 4
gpt4 key购买 nike

我有一个映射多对多关系的 MySQL 数据库表。数据库表包含两列,它们是来自其他表的外键。所以这个数据库表的存在只是为了将A表的外键赋值给B表的外键。

表的结构

第 1 列:conditionID (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 的条目。此查询不够精确,无法获得重复项。

这可以通过一次查询实现吗?

最佳答案

如果我理解正确的话,你想要:

SELECT packageID
FROM many_to_many_table
WHERE conditionId IN (1,2,3)
GROUP BY packageID
HAVING SUM(conditionId = 1) > 0
AND SUM(conditionId = 2) > 0
AND SUM(conditionId = 3) > 0;

DBFiddle

关于php - 在多对多关系中查找重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45690057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com