【问题标题】:Query multiple tables including rows with null foreign keys MySQL查询多个表,包括具有空外键 MySQL 的行
【发布时间】:2013-04-03 16:53:19
【问题描述】:

这是我第一次使用 mysql,我需要一些帮助。我找不到任何解决方案,可能是因为它太容易了,或者我太菜鸟,无法正确查找。

我想从我的测试数据库中的多个表中进行查询。假设表格是:

类别(*id_category, *id_product)

产品(*id_product、id_category、id_supplier、id_manufacturer)

制造商(*id_manufacturer,名称)

供应商(*id_supplier,名称)

带 * 的列是整数主键,不为空,具有 auto_increment(从 1 开始)。其他 id 列只是整数外键(默认为 null)。

我需要一个查询,还包括产品表中 id_manufacturer 和/或 id_supplier 为空的行。产品表中的那些空字段返回值'0',所以当我进行类似查询时

SELECT category.id_product, manufacturer.name, supplier.name 
FROM category, product, manufacturer, supplier 
WHERE category.id_category = product.id_category AND manufacturer.id_manufacturer = product.id_manufacturer AND supplier.id_supplier = product.id_supplier;

没有显示具有空值 (0) 的行。 我希望您以最干净和最有效的方式指出我,而无需更改表属性。任何帮助将不胜感激。

【问题讨论】:

    标签: mysql null foreign-keys multiple-tables


    【解决方案1】:

    这时你需要使用 Left Join。

    SELECT category.id_product, manufacturer.name, supplier.name, P.ID_PRODUCT
    FROM product
    LEFT JOIN category C
    ON C.id_category = P.id_category
    LEFT JOIN manufacturer M
    ON M.id_manufacturer = P.id_manufacturer 
    LEFT JOIN supplier S
    ON S.id_supplier = P.id_supplier;
    

    这些将给出产品表的所有行,即使它没有来自其他表的对应行。

    【讨论】:

    • 就是这样。非常感谢你。对我来说,一步一步:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多