对不起,我的英语不好。
这是表日志
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_id的行。 我认为这是因为日志的第2行与log.product_id = product.id
不匹配有人可以帮助我吗?
答案 0 :(得分:0)
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
表中的信息。为此,您将使用外部联接,即此处为左联接。方法如下:
select log.id,log.action,product.name
from log
left join product on log.product_id = product.id;
答案 1 :(得分:0)
我不确定我的问题是对的,但是如果您还想在结果中包括空值,则可以进行左连接:
select log.id,log.action,product.name from log LEFT JOIN product ON log.product_id = product.id;
有关如何获取包含/不包含NULL的值的更多详细信息,请参见“内部联接”,“外部联接”,“左联接”,“右联接”。