Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 两个表,并从联接表中选择不同的值_Sql_Sql Server_Inner Join_Distinct - Fatal编程技术网

Sql 两个表,并从联接表中选择不同的值

Sql 两个表,并从联接表中选择不同的值,sql,sql-server,inner-join,distinct,Sql,Sql Server,Inner Join,Distinct,我有一个产品表(Product),所有产品都在过滤器联接表(Product_Filter_join)中指定了过滤器(Classic、Round、Wood、moodern、dining等)。我的问题是,我不知道如何显示表产品中的-distinct-值,并且在列出这些产品时,所有过滤器值都必须匹配 +---------------------+-------------+-----------+ | * Product_Table | | | |

我有一个产品表(Product),所有产品都在过滤器联接表(Product_Filter_join)中指定了过滤器(Classic、Round、Wood、moodern、dining等)。我的问题是,我不知道如何显示表产品中的-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 | | +---------------------+-------------+-----------+ +---------------------+-------------+-----------+ |*产品表| |productID | productName || |1 |表1 || |2 |表2 || |3 |表3 || |4 |表4 || | | | | |*过滤器|连接|表|| |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 | | | | | |**过滤器|表|| |filterID | FilterName || |11 |经典|| |12 |木|| |13 |现代|| |14 |餐饮|| +---------------------+-------------+-----------+ 在这个方案中,结果将是:表1、表3,因为它们是唯一共享所有过滤器的产品


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

如果您需要一个随机行的产品\u过滤器\u连接

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 
                 )

如果我对你的问题理解正确,我总是不清楚你的要求。请提供您的模式和预期结果的示例。此外,请添加一个标记,指示您正在使用的RDBMS(Oracle、SQL Server、MySQL等)。@Paul Rowe这是SQLserver@EspenS. 请提供一些查询的示例数据。您可能需要使用此处列出的技术之一:非常感谢,这确实解决了我的问题。完全正确但据我所知,您的解决方案不会随机显示记录。你可以使用
orderbynewid()
。我现在一直在尝试这个解决方案,遇到了一个挑战。希望@Javaluca或其他人能够提供帮助。在上面由Javaluca产品提供的解决方案中,将列出名称为“table”的产品,它们共享一些FilterJoinID,这很好。现在我想知道如何使用它来列出与所有filterjoinID匹配的产品,如果一个名为“table”的产品附带了classic、round、wood和brown等过滤器,我只想列出名为“table”且与上述四个过滤器值相同的产品。