Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 Server查询多对多联接_Sql_Sql Server_Join_Many To Many - Fatal编程技术网

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:这是你现在需要的吗?