【问题标题】:Two tables and select distinct values from joined table两个表并从连接表中选择不同的值
【发布时间】:2015-05-08 10:15:32
【问题描述】:

我有一个产品表 (Product),所有产品都在过滤器连接表 (Product_Filter_Join) 中分配了过滤器,(Classic、Round、Wood、moodern、dining 等)。我的问题是我无法弄清楚如何从表 Product 中显示 -distinct- 值,并且在列出此产品时,所有过滤器值都必须匹配。

+---------+-------------+------------+ | * Product_Table | | | |产品ID |产品名称 | | | 1 |表 1 | | | 2 |表 2 | | | 3 |表 3 | | | 4 |表 4 | | | | | | | * Filter_Join_Table | | | |过滤器加入ID |过滤器ID |产品ID | | 1 | 11 | 1 | | 2 | 12 | 1 | | 3 | 14 | 1 | | 4 | 11 | 2 | | 5 | 11 | 3 | | 6 | 12 | 3 | | 7 | 14 | 3 | | 8 | 13 | 4 | | | | | | ** 过滤表 | | | |过滤器ID |过滤器名称 | | | 11 |经典 | | | 12 |木材 | | | 13 |现代| | | 14 |餐饮 | | +---------+-------------+------------+

在此方案中,结果将是:表 1、表 3,因为它们是唯一共享所有过滤器的产品。

希望有人可以针对我的问题提供一些好的、简单的解决方案。

【问题讨论】:

  • 我不清楚您的要求。请提供您的架构和预期结果的示例。
  • 另外,请添加一个标签,表明您正在使用哪个 RDBMS(Oracle、SQL Server、MySQL 等)。
  • @Paul Rowe 这是 SQL 服务器
  • @EspenS。请为查询提供一些示例数据。
  • 您可能需要使用此处列出的技术之一:stackoverflow.com/questions/194852/…

标签: sql sql-server inner-join distinct


【解决方案1】:

如果需要随机一行 Product_Filter_Join

SELECT TOP 5 p.*
FROM Product p JOIN Product_Filter_Join f ON f.ProductID = p.ProductID
WHERE p.Productname LIKE 'table'
AND NOT EXISTS ( SELECT 'a'
                 FROM Product_Filter_Join f2
                 WHERE f2.ProductID = f.ProductID
                 AND f2.FilterJoinID > f.FilterJoinID 
                 )

如果我理解正确你的问题

【讨论】:

  • 非常感谢,这真的解决了我的问题。发现!但据我所知,您的解决方案不会随机显示记录。可以使用Order By NewID()
  • 我现在一直在尝试这个解决方案,但遇到了一个挑战。希望@Javaluca 或其他人能提供帮助。在上面提供的 Javaluca 产品中提供的解决方案中,名称为“表”的共享某些 FilterJoinID 的产品将被列出,这很好。现在我试图弄清楚如何使用它来列出与所有 filterjoinID 匹配的产品如果名为“table”的产品附加了经典、圆形、木材和棕色等过滤器,我只想列出名称为“table”的产品' 以及与上面相同的四个过滤器值。
猜你喜欢
  • 2019-10-22
  • 2020-03-21
  • 2017-02-20
  • 1970-01-01
  • 2015-06-19
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
相关资源
最近更新 更多