2016-02-04 79 views
0

View Design左外連接,2列缺少一些輸出行

當我從表zvw_test中選擇所有行時,它返回145行。 表Customer_Class_Price有160行。 當我嘗試加入這個2表2的條件使其返回122行。 我不明白becasue我用左外連接應該從返回左表中的所有行爲什麼不從zvw_test(145行)返回所有行 。

謝謝。

SELECT zvw_test.Goods_ID, 
     zvw_test.Thai_Name, 
     zvw_test.UM, 
     zvw_test.CBal, 
     Customer_Class_Price.ListPrice 
    FROM zvw_test 
    LEFT OUTER JOIN 
     Customer_Class_Price ON zvw_test.Goods_ID = Customer_Class_Price.Goods_ID AND 
           zvw_test.UM = Customer_Class_Price.UM 
    WHERE (Customer_Class_Price.ClassCode = '444-666') 
+2

是因爲它的'WHERE(Customer_Class_Price.ClassCode = '444-666')'?你應該把它改爲'WHERE(Customer_Class_Price.ClassCode爲空或Customer_Class_Price.ClassCode =「444-666」)' – JamieD77

+0

後,我改變where子句其利潤歸還138行。 仍然缺少7行。 – njtd

+0

的可能的複製[LEFT OUTER JOIN查詢沒有返回預期的行(http://stackoverflow.com/questions/14861927/left-outer-join-query-not-returning-expected-rows) –

回答

2

我收到了這個問題,我使用的CTE解決這個問題,像:

WITH A AS 
(
    SELECT Customer_Class_Price.Goods_ID, Customer_Class_Price.UM, Customer_Class_Price.ListPrice 
    FROM Customer_Class_Price 
    WHERE Customer_Class_Price.ClassCode = '444-666' 
) 
SELECT zvw_test.Goods_ID, zvw_test.Thai_Name, zvw_test.UM, zvw_test.CBal, A.ListPrice 
FROM zvw_test LEFT OUTER JOIN A 
ON zvw_test.Goods_ID = A.Goods_ID AND zvw_test.UM = A.UM 
+0

此查詢工作 但我不明白爲什麼使用CTE可以解決這個問題。你能解釋一下嗎? 非常感謝。 – njtd

1

你的需求,你的WHERE子句中:

(Customer_Class_Price.ClassCode = '444-666') 

人體工程學你是不是哪裏Customer_Class_Price.ClassCode IS NULL選擇行。 Customer_Class_Price.ClassCode將是NULL,如果沒有相應的行,但你明確地篩選出那些。

3

通過將LEFT OUTER JOIN表中的某一列放入您的WHERE子句中,可以將其有效地轉換爲INNER JOIN。您需要將其移至JOIN條款。