MYSQL组产品的兼容性

时间:2015-06-03 17:09:10

标签: mysql sql group-by group-concat

我有两个表,一个是可以包含各种子产品的工具包,另一个是不能在同一个工具包中添加的子产品列表。

以简化形式:

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中,subProdIDsubProdIncompID都作为kits中的subProdID存在。

现在我使用数据库外部的过程代码来生成一个工具包列表,这些工具包都包含根据subProd_incompatible表不冲突的产品,但是如果可能的话我想在SQL中执行它

我想要的是

SELECT `kitID`, `kitName`, GROUP_CONCAT(`subProdID`)
FROM ("a subquery") AS Q
GROUP BY `GroupingCriterion`

“子查询”应返回kits的列以及生成的GroupingCriterion

1 个答案:

答案 0 :(得分:0)

这是一个想法。对于每个工具包,请获取每个子产品的不兼容表的匹配列表。然后,通过工具包不兼容的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;