[英]SQL Server query many-to-many join
我有一张有客户订单的桌子。 它可以包含客户的多条记录。 我有另一张表,其中包含有关客户的详细信息或功能:年龄,地区,性别等。此表每个表有多个记录。 但每个客户只有一个记录功能。 喜欢
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
谢谢
你必须使用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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.