MySQL:LEFT JOIN .. 从表 1 中选择所有,即使表 2 中没有?

Posted

技术标签:

【中文标题】MySQL:LEFT JOIN .. 从表 1 中选择所有,即使表 2 中没有?【英文标题】:MySQL: LEFT JOIN.. select all from table 1 even if not there in table 2? 【发布时间】:2009-10-21 18:50:26 【问题描述】:

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

如果第 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)表中提取所有内容,即使其他表中没有匹配项?

谢谢!!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

嗨,谢谢,这确实让我跳到了 340。我知道是什么阻止了其余的,但我不知道如何解决它.. 他们可以设置几个 prod_drop.prod_drop_name,所以如果他们有一个已设置但不是克拉重量,我仍然想从 cart_product 中提取什么,而不是从 prod_drop 中提取什么。我被撞到了 340,因为它现在添加了没有 drop_prod 的那些,但是那些确实有 drop_prod 的只是不是克拉重量 drop_prod,我仍然想选择,我只是不想拉 drop_prod,有意义吗?有没有办法做到这一点?谢谢!!! 在子选择上左连接类似 LEFT JOIN (select * prod_drop WHERE prod_drop.prod_drop_name = "克拉重量") AS prod_drop_sub ON prod_drop.prod_drop_id = prod_drop_products.prod_drop_id 然后将 prod_drop 列更改为 prod_drop_sub 列。 【参考方案2】:

试试

WHERE prod_drop.prod_drop_name = "Carat Weight" or prod_drop.prod_drop_name is null

【讨论】:

【参考方案3】:

改变

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 中没有匹配值,查询现在也将返回匹配项。

【讨论】:

嗨,这是我需要的一半。如果有 prod_drop 但它不是“克拉重量”,我仍然想从 cart_product 中选择什么,我只是不想从 prod_drop 中选择任何东西。另外仅供参考,他们可以有几个匹配的 drop_prods,但如果名称是克拉重量,我只想从 drop_prod 中提取数据。如果没有 drop_prod,或者有一个名称不同的 drop_prod,那么我只想从 cart_product 中拉取。这有意义吗... 分解成多个查询会更好吗?

以上是关于MySQL:LEFT JOIN .. 从表 1 中选择所有,即使表 2 中没有?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 如何使用 LEFT JOIN 从表中选择单个值,在 Google Datastudio 中

mysql SELECT LEFT JOIN ON 查询总是超时,大侠能帮忙优化一下吗?

MySql 之 left join 查询结果

使用 LEFT JOIN 删除

MySQL 数据库中 left outer join 和 left join 啥区别

MySQL 数据库中 left outer join 和 left join 啥区别?