2017-08-14 143 views
0

我有三个表一个是产品和第二是appliedFeaturesValue,三是appliedFeaturesMySQL查询多对多关系

在产品表appliedFeaturesValue有多对多的关系。

ProductID appliedFeaturesValueId 
1   1 
1   2 
2   1 
3   2 

并且在appliedFeaturesValue表中与appliedFeatures具有ManyToOne关系。

appliedFeaturesValue appliedFeaturesId 
    1       70 
    2       88 

我想如果我使用IN子句则不会返回准确的产品数据,其中appliedFeaturesValue.id获得产品编号1,其中两个appliedFeaturesValue编号1和2是appliedFeaturesId 70可代表和88

= 1 AND appliedFeaturesValue.id = 2.

如果我使用AND子句,则找不到结果。

这是我与AND子句原始查询在没有结果发现: -

SELECT p0_ FROM Product p0_ INNER JOIN product_applied_features_value p2_ ON p0_.id = p2_.product_id INNER JOIN applied_features_value a1_ ON a1_.id = p2_.applied_features_value_id WHERE p0_.status = 1 AND a1_.applied_features_id = 70 AND a1_.applied_features_id = 88 ORDER BY p0_.id DESC 

这是我的查询与IN子句: -

SELECT p0_ FROM Product p0_ INNER JOIN product_applied_features_value p2_ ON p0_.id = p2_.product_id INNER JOIN applied_features_value a1_ ON a1_.id = p2_.applied_features_value_id WHERE p0_.status = 1 AND a1_.applied_features_id IN (70,88) ORDER BY p0_.id DESC 

我怎么会得到完全匹配的记录?

+0

你可以用一些测试数据[在这里](http://sqlfiddle.com/)创建一个模式的例子并指定合适的输出吗? – Serg

回答

0

尝试下面的查询,它可以帮助你。

SELECT product.* FROM Product product 
INNER JOIN product_applied_features_value prodAppFeatures ON product.appliedFeaturesValueId = prodAppFeatures.id 
INNER JOIN applied_features_value appFeatures ON appFeatures.id = prodAppFeatures.applied_features_value_id 
WHERE product.status = 1 AND 
    appFeatures.applied_features_id = 70 AND a1_.applied_features_id = 88 ORDER BY product.id DESC