【问题标题】:MYSQL group products by compatibiltyMYSQL 按兼容性分组产品
【发布时间】:2015-06-03 17:09:10
【问题描述】:

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

简化形式:

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_incompatiblesubProdIDsubProdIncompID 中都作为子ProdID 存在于kits

现在我使用数据库外部的程序代码来生成一个套件列表,这些套件都包含根据subProd_incompatible 表不冲突的产品,但如果可能的话,我想在 SQL 中完成。

我想要的是

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

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

【问题讨论】:

  • 你能提供一些示例数据和所需的o/p吗?
  • 你的数据结构真的没有意义,除非子产品只能在一个套件中。
  • @GordonLinoff:一个子产品可以包含在多个套件中。此外,我正在使用的真实数据要广泛得多,这只是一个精简的、匿名的版本。另请注意,并非kita 表中的每个子产品都存在不兼容性。

标签: mysql sql group-by group-concat


【解决方案1】:

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

【讨论】:

  • 好的,越来越近了。我最终要努力的是返回的子查询中的一列,它标识相互兼容的子产品组。
  • @FenugreekFemtosecond 。 . .这听起来不像你问的问题。我建议您连同样本数据和期望的结果一起提出另一个问题。更改问题以使答案无效不仅是不礼貌的(它会引起反对票),而且还可能使其他人不愿意回答这个问题。
猜你喜欢
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多