select from 2 table get rows include foreign key为null

nnsrf1az  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(291)

对不起,我英语不好。
这是表格日志

Log
id action product_id table
1  Insert 1          product
2  Read   null       product
3  Update 1          product

这是餐桌产品

Product
id name
1  A
2  B

我想做的是从日志中获取所有行,但有一些条件。
我试着用:

select log.id,log.action,product.name from log,product where log.product_id = product.id;

但它只返回包含product\u id的行,我认为这是因为log的第2行与log.product\u id=product.id不匹配
有人能帮我吗?

jjjwad0x

jjjwad0x1#

我不确定我是否正确回答了您的问题,但如果您希望在结果中也包含空值,可以执行左联接:

select log.id,log.action,product.name from log LEFT JOIN product ON log.product_id = product.id;

有关如何获取包含/不包含null的值的详细信息,请参见内部联接、外部联接、左联接、右联接。

vi4fp9gy

vi4fp9gy2#

中以逗号分隔的表列表 FROM 子句表示 CROSS JOIN. 添加 WHERE 像你这样的从句,意味着 INNER JOIN . 你需要的是一个 LEFT JOIN .
你应该改用传统的加入方式。您当前的查询:

select log.id,log.action,product.name 
from log,product 
where log.product_id = product.id;

重写为使用联接将如下所示:

select log.id,log.action,product.name 
from log 
inner join product on log.product_id = product.id;

但这不是您想要的,因为您想要 log 表格中要填写的信息来自 product table。为此,您将使用外部连接,即这里的左连接。方法如下:

select log.id,log.action,product.name 
from log 
left join product on log.product_id = product.id;

相关问题