如何在由不同属性定义的数据集中识别唯一的项?

zphenhs4  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(316)

我有以下项目数据集
项目:

item
i1
i2
i3
i4

属性

item | attribute | attr_group
i1     green       color
i2     red         color
i1     fancy       style
i2     cool        style
i4     purple      color
i3     red         color
i1     REF1        refid
i2     REF2        refid
i3     REF2        refid
i4     REF1        refid

属性组名称

attr | group
a1     color
a2     style
a3     refid

文章:

article_id | title ..
ref1_1
ref1_2
ref2

现在我想用由 article_id . 唯一项定义为具有refid的项,该refid要么没有属性,要么具有一种以上不同的颜色。
e、 g.有两个项目带有ref1(绿色和紫色),因此ref1本身不能是唯一的,但将有两个项目标识:ref1和ref1。
具有ref2的项目具有相同的颜色,因此只需定义一个项目id。
一个可能的mysql查询如何选择唯一的项并将它们插入表中?我不能对这件事耿耿于怀,非常感谢你的帮助。
我的最佳尝试类似于下面的sql查询,但是它只会基于ref\u id和颜色定义项目,缺少的是具有相同颜色的项目。

/* create unique articles */
INSERT
IGNORE INTO articles (article_id, URL, ref_id, cat_id, dial_id)
SELECT CONCAT ( a.value, '-', a2.value) AS article_id,
       CONCAT ( cs.name_safe, '-', LOWER(ca.attr_de), '-r', a.value) AS URL,
       a.value AS refid,
       cs.ID,
       a2.value AS color_id
FROM `classifieds_attr` a
INNER JOIN classifieds c ON c.ID = a.cl_id
INNER JOIN cat_names_sub cs ON c.cat_id = cs.ID
INNER JOIN `classifieds_attr` a2 ON c.ID = a2.cl_id
AND a2.attr_group_id = 9
INNER JOIN cat_attr ca ON a2.value = ca.attr_id
WHERE a.attr_group_id = 8
  AND cs.cat_main_id = 15
  AND a2.value NOT LIKE 'Invalid:%'
GROUP BY refid,color_id
qyyhg6bp

qyyhg6bp1#

获取项目并不难:

SELECT a.item
FROM attributes a
GROUP BY a.item
HAVING sum(attr_group = 'refid') > 0 AND
       (sum(attr_group = 'refid') = count(*) OR -- only a refid
        min(CASE WHEN attr_group = 'color' THEN attribute END) <>
        max(CASE WHEN attr_gruop = 'color' THEN attribute END)
       );

我不知道如何把这些变成“文章”,但这可能是你需要的。

相关问题