获取同一表中列中匹配值的行

时间:2014-02-14 09:18:34

标签: mysql sql optimization join inner-join

我有以下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个产品具有相同的制造商和(同时)相同的特征值

1 个答案:

答案 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链接:

http://sqlfiddle.com/#!2/cbe05/70