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)
答案 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
更改为适当的谓词。