2013-08-27 161 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