MySQL:从多个表中选择 DISTINCT

标签 mysql select distinct distinct-values

我的数据库中有几个表。为了举例,我将简化它并尝试详细解释。

一个表称为“产品”,另一个表称为“品牌”,最后一个表称为“类别”。

正如您可能猜到的那样,每个产品只能分配一个类别。此外,每种产品只能分配一个品牌。这些是关系。

因此,在一个页面上,我将品牌链接作为参数,将其传递到详细信息页面,在该页面上列出了特定品牌的所有产品。在该页面上,我还按类别进行过滤,仅按该过滤器过滤所选品牌的产品。

例如索尼 -> 然后从下拉列表中应用的过滤器是 dSLR -> 索尼品牌 dSLR 相机产品的结果。

我想要的是过滤该类别,这样如果品牌没有特定类别,它甚至不会显示在该下拉过滤器上。

例如类别预定义为:dSLR、视频、手机、鞋子

索尼拥有大量产品,但不生产鞋子,因此我希望将其从详细信息页面上的过滤器列表中排除。

希望你明白我想要什么......

欢迎任何建议:)

最佳答案

那么,您应该能够像这样连接三个表:

SELECT DISTINCT c.category_id, c.category_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
JOIN brands b ON p.brand_id = b.brand_id
WHERE b.brand_name='Sony';

然后像这样显示产品:

SELECT p.product_id, p.product_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
JOIN brands b ON p.brand_id = b.brand_id
WHERE b.brand_name='Sony' AND c.category_id='1234';

正如 danishgoel 已经指出的那样,请确保表上有正确的索引,因为这是一个相当昂贵的查询。

关于MySQL:从多个表中选择 DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565573/

相关文章:

mysql - 重新排列每个月的 MySQL 表

PHP网页解析到MYSQL数据库

SQL 大于、等于和小于

MYSQL Where 函数

mysql - 具有不同且匹配的两个不同表的 SQL 计数

python - 将 MySQL 数据导入 Orange ExampleTable

mysql - 为什么 phpmyadmin 不理解 MD5?

mysql select查询优化

sql - 按 XML 的不同大小写排序

sql - 通过滚动窗口分区计算不同的客户