我有两个表,一个是可以包含各种子产品的工具包,另一个是不能在同一个工具包中添加的子产品列表。
以简化形式:
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
都作为kits
中的subProdID存在。
现在我使用数据库外部的过程代码来生成一个工具包列表,这些工具包都包含根据subProd_incompatible
表不冲突的产品,但是如果可能的话我想在SQL中执行它
我想要的是
SELECT `kitID`, `kitName`, GROUP_CONCAT(`subProdID`)
FROM ("a subquery") AS Q
GROUP BY `GroupingCriterion`
“子查询”应返回kits
的列以及生成的GroupingCriterion
。
答案 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;