Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询多个表,包括具有空外键的行_Mysql_Null_Foreign Keys_Multiple Tables - Fatal编程技术网

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

Mysql 查询多个表,包括具有空外键的行,mysql,null,foreign-keys,multiple-tables,Mysql,Null,Foreign Keys,Multiple Tables,这是我第一次使用mysql,我需要一些帮助。我找不到任何解决办法,可能是因为它太容易了,或者我还没有找到合适的答案 我想从测试数据库的多个表中进行查询。假设表格是: 类别(*id\U类别,*id\U产品) 产品(*标识产品、标识类别、标识供应商、标识制造商) 制造商(*id_制造商,名称) 供应商(*id_供应商,名称) 带*的列是具有自动增量(从1开始)的整数主键NOTNULL。其他id列只是整数外键(默认为null) 我需要一个查询,其中还包括product表上id为null的行(制造商和/

这是我第一次使用mysql,我需要一些帮助。我找不到任何解决办法,可能是因为它太容易了,或者我还没有找到合适的答案

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

类别(*id\U类别,*id\U产品)

产品(*标识产品、标识类别、标识供应商、标识制造商)

制造商(*id_制造商,名称)

供应商(*id_供应商,名称)

带*的列是具有自动增量(从1开始)的整数主键NOTNULL。其他id列只是整数外键(默认为null)

我需要一个查询,其中还包括product表上id为null的行(制造商和/或供应商)。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)的行。
我希望您能为我指出一种最干净、最有效的方法,在不改变表属性的情况下完成这项工作。非常感谢您的帮助。

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

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

就是这样。非常感谢你。对我来说,一步一个脚印:)