我有以下DDL ......
CREATE TABLE IF NOT EXISTS `product` (
`id_product` int(10),
`id_manufacturer` int(10)
);
INSERT INTO `product` (`id_product`, `id_manufacturer`) VALUES
(1,1),
(2,1),
(3,2),
(4,1),
(5,2);
CREATE TABLE IF NOT EXISTS `feature_product` (
`id_feature` int(10),
`id_product` int(10),
`id_feature_value` int(10)
);
INSERT INTO `feature_product` (`id_feature`, `id_product`, `id_feature_value`) VALUES
(5, 1, 9),
(5, 2, 9),
(5, 3, 10),
(5, 4, 10),
(7, 5, 10);
http://sqlfiddle.com/#!2/cbe05/1/0
请您解释一下,我怎么能得到 - 所有产品都具有相同的制造商和相同的Feature_value?
现在(在项目中)我使用2个额外的SELECT(用于获取id_manufacturer和id_feature_value),但也许有更正确(和快速)的方式?
感谢您的时间和对不起我的英语)
我也需要看到这样的结果:
id_product |
-----------|
1 |
2 |
只有这2个产品具有相同的制造商和(同时)相同的特征值
答案 0 :(得分:0)
只需使用GROUP_CONCAT:
SELECT GROUP_CONCAT(p.id_product SEPARATOR '\n') AS Products
FROM product p
INNER JOIN feature_product fp ON (p.id_product = fp.id_product AND fp.id_feature = 5)
GROUP BY p.id_manufacturer, fp.id_feature_value
HAVING COUNT(p.id_manufacturer) > 1
AND COUNT(fp.id_feature_value)>1;
这将为您提供在一行中具有多个制造商ID和特征值的产品列表,以换行符分隔。您可以根据需要更改分隔符。
这是SQL Fiddle链接: