SQL JOIN上的多个条件

时间:2015-12-22 04:16:29

标签: sql join

tldr:

我有一个带有主键id的表A和一个带有指向A.id的外键的表B

我想选择所有包含B的A.但不是任何B,只有应用了 s 条件的B。

-

为了让您了解这个问题,我们先说 我的表格A是products,我的表格B是features

我想根据某些功能对产品进行搜索。

我的第一种方法是使用不同的别名多次加入表features,然后为每个别名应用一个条件。但我很确定在执行此操作方面有更合适的方式。

GROUP BY products和单个联接会更快吗?

感谢您的考虑。

EDT:根据评论的要求,这里是数据结构:

TABLE products
id (int 11)
name (varchar)
category (int 11)   fk->categories.id
description (mediumtext)
[...]

TABLE features
id (int 11)
name (varchar)
category (int 11)   fk->categories.id

TABLE products_features
id (int 11)
product (int 11)    fk->products.id
feature (varchar)   fk->features.id
value (varchar)

TABLE categories
id (int 11)
name (varchar)

1 个答案:

答案 0 :(得分:1)

您可以在此处应用条件聚合:

SELECT p.id
FROM products p 
JOIN features f ON p.id = f.pid
GROUP BY p.id
HAVING SUM(CASE WHEN f.feature = 1 THEN 1 ELSE 0 END) > 0 AND
       SUM(CASE WHEN f.feature = 2 THEN 1 ELSE 0 END) > 0

f.feature = 1更改为适当的谓词。