2010-09-16 55 views
0

我有以下SQL查询如何在连接表查询中的一个连接表中缺少结果时返回结果?

SELECT tbl_product.prod_id, 
     ISNULL (prod_code, '')      AS prod_code, 
     ISNULL (prod_category, '')     AS prod_category, 
     ISNULL(prod_title, '')      AS prod_title, 
     ISNULL(prod_price, 0.0)      AS prod_price, 
     ISNULL(tbl_product.prod_sales_price, 0.0) AS prod_sales_price, 
     ISNULL(prod_desc, '')      AS prod_desc, 
     ISNULL(prod_location, '')     AS prod_location, 
     brand_title, 
     pd_discount = CASE 
         WHEN P_Discount > 0 THEN vw_discounts.P_Discount 
         WHEN B_discount > 0 THEN vw_discounts.B_discount 
         WHEN D_Discount > 0 THEN vw_discounts.D_Discount 
         ELSE 0.00 
        END, 
     ISNULL((SELECT image_path 
       FROM tbl_image 
       WHERE tbl_image.prod_id = tbl_product.prod_id 
         AND image_primary = 1), '''') AS MainImage, 
     ISNULL(prod_pick_from_store, 0)    AS prod_pick_from_store 
FROM tbl_product 
     LEFT JOIN tbl_brand 
     ON tbl_brand.brand_id = tbl_product.brand_id 
     LEFT JOIN tbl_discount 
     ON Pd_ProdId = tbl_product.Prod_id 
     INNER JOIN vw_discounts 
     ON Pd_ProdId = vw_discounts.prod_id 
WHERE tbl_product.prod_id > 270 
     AND tbl_product.prod_id < 290 

目前该查询不具有在tbl_discount入门产品不返回结果。我如何适应它,以便它呢?

回答

2

我认为实际情况是,没有在vw_discounts一个条目记录被忽略 你应该使用左连接加入与折扣查看过

+0

可爱,这就是它,非常感谢! – fearoffours 2010-09-16 11:50:32

1

我认为你将不得不改变内在vw_discounts加入为左连接

1

以下连接:

LEFT JOIN tbl_discount 

包括来自左表(S)的所有记录,即使有右表中没有相应的记录。

所以,似乎问题不在于tbl_discount连接,而是在vw_discounts连接。尝试将其更改为

LEFT JOIN vw_discounts 
+0

我认为你的倒数第二句话有一个错字 - 请你检查一下吗? – fearoffours 2010-09-16 11:35:40

+0

对不起,修正:) – Kel 2010-09-16 17:06:26

0

您需要更改下面连接到外部连接

LEFT JOIN tbl_brand ON tbl_brand.brand_id = tbl_product.brand_id LEFT JOIN tbl_discount ON Pd_ProdId = tbl_product.Prod_id INNER JOIN vw_discounts ON Pd_ProdId = vw_discounts.prod_id

相关问题