SQL Server查询多对多连接

时间:2013-08-27 12:28:26

标签: sql sql-server join many-to-many

我有一张有客户订单的表格。它可以包含客户的多条记录。 我有另一张表,其中包含有关客户的详细信息或功能:年龄,地区,性别等。此表有多个 每张桌子的记录。但每个客户只有一个记录功能。喜欢

cust_id, feature_id, value ; 
cust_id, feature_id, vaule; 
cust_id, feature_id, value. 
...
...
etc.

cust_id和feature_id是表中的主键。 例如,针对性别的feature_id为200,针对年龄的feature_id为201,针对区域的feature_id为230等

现在我创建的报告必须与某些人口统计中的客户总数有关。所以我写了以下查询:

SELECT * 
FROM   CUST_ORDER co 
       JOIN FEATURE_VALUES fv 
         ON fv.CUST_ID = co.CUST_ID 
WHERE  ( fv.FEATURE_ID = 200 
         AND fv.VALUE = 1 ) 
       AND ( fv.FEATURE_ID = 201 
             AND fv.VALUE > 25 ) 
       AND ( fv.FEATURE_ID = 230 
             AND fv.VALUE > 3 ) 

这不会返回任何记录,我知道为什么但不知道如何获得结果。 感谢任何帮助或指导。

以下是一些示例数据

1   200 1   
1   201 40
1   230 3
2   200 2   
2   201 27
2   230 2
etc

由于

1 个答案:

答案 0 :(得分:2)

您必须使用 OR ,而不是 AND

SELECT * FROM cust_order co
INNER JOIN feature_values fv ON fv.cust_id = co.cust_id
WHERE
   (fv.feature_id = 200 and fv.value = 1 )
OR (fv.feature_id = 201 and fv.value > 25 )
OR (fv.feature_id = 230 and fv.value > 3 )

使用 AND ,您要求的结果同时满足这些条件,而这是不可能的!

更新:用户评论后的新查询:

SELECT * FROM cust_order co
INNER JOIN feature_values fv1 ON fv1.cust_id = co.cust_id
INNER JOIN feature_values fv2 ON fv2.cust_id = co.cust_id
INNER JOIN feature_values fv3 ON fv3.cust_id = co.cust_id
WHERE
    (fv1.feature_id = 200 and fv1.value = 1  )
AND (fv2.feature_id = 201 and fv2.value > 25 )
AND (fv3.feature_id = 230 and fv3.value > 3  )