SQL Server查询多对多联接
我有一张有顾客订单的桌子。它可以包含客户的多个记录。 我有另一个表,其中包含有关客户的详细信息或特征:年龄、地区、性别等。此表有多个 每个表的记录。但每个客户功能只有一条记录。像SQL Server查询多对多联接,sql,sql-server,join,many-to-many,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是表上的主键。 例如,性别的特征id是200,年龄的特征id是201,地区的特征
cust_id, feature_id, value ;
cust_id, feature_id, vaule;
cust_id, feature_id, value.
...
...
etc.
cust_id和feature_id是表上的主键。
例如,性别的特征id是200,年龄的特征id是201,地区的特征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
谢谢您必须使用或,而不是和
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 )
使用和可以要求同时满足这些条件的结果,但这是不可能的
更新:用户评论后的新查询:
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 )
你能为我们添加一些样本数据吗?我需要所有这些条件。或者不会有帮助。比如我需要报告年龄>25岁、居住在西南地区的女性等@user1860447:这是你现在需要的吗?