Sql 是否有一种方法可以从一个表中选择全部,并在可能的情况下进行联接?

Sql 是否有一种方法可以从一个表中选择全部,并在可能的情况下进行联接?,sql,postgresql,Sql,Postgresql,对于SQL和postgreSQL,我是个初学者,所以我不知道这是否是一个明显的问题。 我有两张桌子:产品和图片。我需要以某种方式选择所有产品,如果存在,则从图像表中选择它们的缩略图 这就是我到目前为止所做的: 创建表格产品( ID串行主键, .... ); 创建表产品目录文件( ID串行主键, product_id整数不为空引用产品(id), 是否为布尔值不为NULL默认值为FALSE, ... ); 选择p.id作为产品标识、p.status、p.title、p.description、pf.

对于SQL和postgreSQL,我是个初学者,所以我不知道这是否是一个明显的问题。 我有两张桌子:产品和图片。我需要以某种方式选择所有产品,如果存在,则从图像表中选择它们的缩略图

这就是我到目前为止所做的:

创建表格产品(
ID串行主键,
....
);
创建表产品目录文件(
ID串行主键,
product_id整数不为空引用产品(id),
是否为布尔值不为NULL默认值为FALSE,
...
);
选择p.id作为产品标识、p.status、p.title、p.description、pf.id、pf.file\u name、pf.is\u缩略图
从产品p左连接产品文件pf
ON p.id=pf.product\u id
式中,pf.is_=true;

但是我无法让它选择所有的产品,即使是没有缩略图为true的图像的产品。

您需要将缩略图的条件从WHERE移出到JOIN条件:

select ..
FROM products p 
  LEFT  JOIN product_files pf ON p.id=pf.product_id AND pf.is_thumbnail=true;

您需要将缩略图的条件从WHERE移出到JOIN条件中:

select ..
FROM products p 
  LEFT  JOIN product_files pf ON p.id=pf.product_id AND pf.is_thumbnail=true;

WHERE
子句将外部联接转换为内部联接,因为不匹配项会被过滤掉

只需将条件移动到
ON
子句:

SELECT p.id as product_id, p.status, p.title, p.description, pf.id, pf.file_name, pf.is_thumbnail
FROM products p LEFT JOIN
     product_files pf
     ON p.id  =pf.product_id AND pf.is_thumbnail;
=true
没有什么错。但是,
是一个布尔值,因此也没有理由进行显式比较


过滤
左连接时的一般规则是将条件放在
WHERE
子句的第一个表中。以及
on
子句中的
后续表上的筛选条件。

WHERE
子句将外部联接转换为内部联接,因为会筛选出不匹配项

只需将条件移动到
ON
子句:

SELECT p.id as product_id, p.status, p.title, p.description, pf.id, pf.file_name, pf.is_thumbnail
FROM products p LEFT JOIN
     product_files pf
     ON p.id  =pf.product_id AND pf.is_thumbnail;
=true
没有什么错。但是,
是一个布尔值,因此也没有理由进行显式比较


过滤
左连接时的一般规则是将条件放在
WHERE
子句的第一个表中。以及在
on
子句中对后续表格的过滤条件。

如果删除WHERE pf.is\u thumbnail=true,您应该得到您想要的内容为什么要使用“thumbnail=true”条件?bc我不想选择其他图像,只选择缩略图或产品如果删除WHERE pf.is\u thumbnail=true,你应该得到你想要的东西你为什么要使用“缩略图=真”条件?bc我不想选择其他图像,只是缩略图或只是产品Gordon,如果他想要所有产品及其图像(如果存在),他是否需要“和pf.is_缩略图”条件?因为这样我也会得到图像,其中的缩略图=假,对吗?@Qoutroy
is_缩略图
is_缩略图=真
Gordon相同,如果他想要所有产品及其图像(如果存在),他是否需要“and pf.is_缩略图”条件?因为这样我也会得到图像,其中is_缩略图=假,对吗?@Qoutroy
是缩略图
是缩略图=true