MYSQL 按兼容性分组产品

标签 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都作为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/

相关文章:

php - 找不到 Laravel 4 迁移基表

sql - 合并bigquery中具有一个公共(public)值的数组

mysql - 选择昨天和一周前的结果

sql - 甲骨文 SQL : Find each position of specific character in multi-row column without duplicates

Mysql内部查询获取金额总和

sql - T-SQL 分组依据和子查询

php - 无法在 PHP 中执行 SELECT QUERY 作为 PREPARED SQL STATEMENT

php - 如何比较 Auth::user()->id 和 userid 并在 Laravel 中运行 if else 命令

MySQL - 垂直连接查询结果

python - 如何组合两列以创建第三列,通过方法从组中获取属性?