我有以下项目数据集
项目:
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或具有一种以上不同颜色的商品。
例如ref1有两个项目(绿色和紫色),因此ref1本身不能唯一,但是将具有2个article_id:ref1_1和ref1_2。
具有ref2的商品具有相同的颜色,因此只能定义一个article_id。
一个可能的MySQL查询看起来如何选择独特的项目并将其插入表项目中?我对此无能为力,不胜感激。
我的最佳尝试看起来像下面的SQL查询,但是它将仅基于ref_id和color定义文章,而缺少所有颜色相同的项目。
/* 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
答案 0 :(得分:0)
获取物品并不难:
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)
);
我不确定如何将它们变成“文章”,但这可能正是您所需要的。