You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中获取含匹配与未匹配记录的供应商关联结果集?

解决LEFT JOIN后无法获取未关联记录的问题

你的问题出在把product_suppliers.product_id = 9这个条件放在了WHERE子句中。当使用LEFT JOIN时,左表(suppliers)的所有记录都会被保留,但如果右表(product_suppliers)没有匹配的记录,对应的字段会是NULL。而WHERE子句会对连接后的所有结果行进行过滤,NULL = 9的判断结果不成立,所以那些没有关联lemon的供应商记录就被过滤掉了。

正确的查询语句

把product_id = 9的条件移到LEFT JOIN的ON子句中,这样在连接阶段就只匹配与lemon(id=9)关联的供应商记录,未关联的供应商依然会被保留:

SELECT 
    suppliers.name AS supplierName,
    product_suppliers.id AS productSupplier
FROM suppliers
LEFT JOIN product_suppliers 
    ON suppliers.id = product_suppliers.supplier_id 
    AND product_suppliers.product_id = 9;

为什么这样有效?

  • ON子句的作用是定义连接时的匹配规则,在这里我们只让product_suppliers中product_id=9的记录与suppliers进行匹配。
  • 对于没有关联lemon的供应商,product_suppliers对应的字段会是NULL,正好符合你需要的结果格式。

如果你的需求只是标记供应商是否关联了lemon(而不是返回product_suppliers的id),也可以用CASE语句生成更直观的状态:

SELECT 
    suppliers.name AS supplierName,
    CASE 
        WHEN product_suppliers.id IS NOT NULL THEN 1 
        ELSE NULL 
    END AS productSupplier
FROM suppliers
LEFT JOIN product_suppliers 
    ON suppliers.id = product_suppliers.supplier_id 
    AND product_suppliers.product_id = 9;

内容的提问来源于stack exchange,提问作者Stefan Pandele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:42:48