2013-08-27 117 views
0

我有一张有客户订单的表。它可以包含客户的多个记录。 我有另一张表格,其中包含有关客户的详细信息或功能:年龄,地区,性别等。此表每个表格有多个 记录。但每个客户功能只有一个记录。像SQL Server查询多对多连接

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 

感谢

+0

你可以添加一些样本数据,我们一起工作:用户评论后,新的查询? – Gidil

回答

2

您必须使用OR,不

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) 

使用你所要求的结果,同时fullfill这些条件,而这是不可能的!

UPDATE

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 ) 
+0

我需要所有这些条件。或者不会帮助。就像我需要报告女性年龄> 25,生活在西南地区等 – user1860447

+0

@ user1860447:看看我编辑的查询 – Marco

+0

@ user1860447:你现在需要什么? – Marco