3

我要加入几张桌子以供选择

如果第 2、3、4 个表中没有任何匹配项,只要第一个表匹配,我仍然想提取结果。我以为 LEFT JOIN 做到了这一点,但事实并非如此。

这是完整的查询:

SELECT cart_product.*, prod_drop_products.prod_drop_product_name, everlon_sheet.*, cart_product.product_id AS product_id 
FROM cart_product 
LEFT JOIN everlon_sheet ON cart_product.product_id = everlon_sheet.product_id 
LEFT JOIN prod_drop_products ON cart_product.product_id = prod_drop_products.product_id 
LEFT JOIN prod_drop ON prod_drop.prod_drop_id = prod_drop_products.prod_drop_id 
WHERE prod_drop.prod_drop_name = "Carat Weight" AND cart_product.product_brand = "everlon" 
ORDER BY cart_product.product_manufacturer_num

得出 316 个结果

这是没有连接的查询:

SELECT cart_product.* 
FROM cart_product 
WHERE cart_product.product_brand = "everlon" 
ORDER BY cart_product.product_manufacturer_num

得出 362 个结果

我有一种预感,这是因为我在 JOIN qry 中的WHERE prod_drop.prod_drop_name = "Carat Weight"子句。但是有没有办法在上面的查询中提取我需要的内容,但仍然从第一个(最左边,cart_product)表中提取所有内容,即使其他表中没有匹配项?

谢谢!!

4

3 回答 3

3

如果右侧没有匹配,则 prod_drop.prod_drop_name 将为 null

添加 OR prod_drop.prod_drop_name IS NULL 应该可以解决您的问题。

于 2009-10-21T18:55:51.177 回答
1

尝试

WHERE prod_drop.prod_drop_name = "Carat Weight" or prod_drop.prod_drop_name is null
于 2009-10-21T18:56:02.123 回答
1

改变

WHERE prod_drop.prod_drop_name = "Carat Weight" AND cart_product.product_brand = "everlon" 

WHERE (prod_drop.prod_drop_name = "Carat Weight" OR prod_drop.prod_drop_name IS NULL) AND cart_product.product_brand = "everlon" 

如果 prod_drop 中没有匹配值,查询现在也将返回匹配项。

于 2009-10-21T18:56:22.423 回答