查询多个表,包括具有空外键MySQL的行

时间:2013-04-03 16:53:19

标签: mysql null foreign-keys multiple-tables

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

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

类别(* id_category,* id_product)

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

制造商(* id_manufacturer,名称)

供应商(* id_supplier,名称)

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

我还需要一个查询,也包括产品表上带有null id_manufacturer和/或id_supplier的行。 product表中的那些空字段返回值'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)的行。 我希望您能够以最干净,最有效的方式指出我,而不必更改表格属性。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

你需要使用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;

这些将提供product表的所有行,即使它没有来自其他表的相应行。