我有两个表,一个是可以包含各种子产品的套件,另一个是不能在同一个套件中一起添加的子产品列表。
简化形式:
CREATE TABLE `kits` (
`subProdID` INT(11) NOT NULL DEFAULT '0',
`kitID` VARCHAR(50) NULL DEFAULT NULL,
`kitName` VARCHAR(512) NULL DEFAULT NULL,
PRIMARY KEY (`subProdID`)
);
CREATE TABLE `subProd_incompatible` (
`IncompID` INT(11) NOT NULL DEFAULT '0',
`subProdID` INT(11) NULL DEFAULT NULL,
`subProdIncompID` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`VersaIncompID`)
)
在subProd_incompatible
中,subProdID
和subProdIncompID
都作为subProdID存在于kits
中。
现在,我使用数据库外部的程序代码来生成一个套件列表,所有套件都包含根据 subProd_incompatible
表不冲突的产品,但我想在 SQL 中执行,如果尽一切可能。
我想要的是
SELECT `kitID`, `kitName`, GROUP_CONCAT(`subProdID`)
FROM ("a subquery") AS Q
GROUP BY `GroupingCriterion`
“子查询”应该返回 kits
的列,以及生成的 GroupingCriterion
。
最佳答案
这是一个想法。对于每个套件,获取每个子产品的不兼容表的匹配列表。然后,按套件 和 不兼容的 id 聚合,看看是否有两个产品。如果是这样,您的套件中有不兼容的产品:
select k.kitid, i.InCompId
from kits k join
subProd_incompatible i
on k.subProdId in (i.subProdId, i.subProdIncompID)
group by k.kitid, i.InCompId
having count(distinct k.subProdId) = 2;
关于MYSQL 按兼容性分组产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626472/