两个表并从连接表中选择不同的值

时间:2015-03-06 18:15:17

标签: sql sql-server inner-join distinct

我有一个产品表(产品),所有产品都在过滤器连接表(Product_Filter_Join),(经典,圆形,木材,现代,餐饮等)中分配了过滤器。我的问题是,我无法弄清楚如何从表Product中显示-distinct-值,并且在列出此产品时,所有过滤器值都必须匹配。

+---------------------+-------------+-----------+
| * Product_Table     |             |           |
| productID           | productName |           |
| 1                   | table 1     |           |
| 2                   | table 2     |           |
| 3                   | table 3     |           |
| 4                   | table 4     |           |
|                     |             |           |
| * Filter_Join_Table |             |           |
| FilterJoinID        | filterID    | productID |
| 1                   | 11          | 1         |
| 2                   | 12          | 1         |
| 3                   | 14          | 1         |
| 4                   | 11          | 2         |
| 5                   | 11          | 3         |
| 6                   | 12          | 3         |
| 7                   | 14          | 3         |
| 8                   | 13          | 4         |
|                     |             |           |
| ** Filter_Table     |             |           |
| filterID            | FilterName  |           |
| 11                  | Classic     |           |
| 12                  | Wood        |           |
| 13                  | modern      |           |
| 14                  | dining      |           |
+---------------------+-------------+-----------+

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

希望有人能为我的问题提供一些好的,简单的解决方案。

1 个答案:

答案 0 :(得分: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 
                 )

总是如果我已正确理解你的问题