当我从表zvw_test中选择所有行时,它返回145行。 表Customer_Class_Price有160行。 当我尝试以2个条件连接这个2表时,它返回122行。 我不明白为什么它不从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')
答案 0 :(得分:3)
通过在LEFT OUTER JOIN
子句中放置WHERE
表中的一列,您已将其有效地转换为INNER JOIN
。您需要将其移至JOIN
子句。
答案 1 :(得分: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
答案 2 :(得分:1)
您在WHERE子句中要求:
(Customer_Class_Price.ClassCode = '444-666')
因此,您没有选择Customer_Class_Price.ClassCode IS NULL
的行。如果没有相应的行,Customer_Class_Price.ClassCode
将为NULL,但您将明确过滤掉这些行。