Postgres中的LEFT JOIN查询

艾娃

我正在尝试使用LEFT JOIN在Postgres中进行选择查询,但是我无法获得正确的结果。我有2张桌子-offers并且images当要约有图片时,它们会插入到表格图片中。但是,并非所有报价都有图片。

现在,我要从搜索的内容中选择所有要约(包含图像和不包含图像),如果这些要约具有图像,则显示它们。我尝试使用LEFT JOIN从images是否有图像中进行选择,但是当我尝试显示它们时,有NULL值-没有任何返回值。

我的查询出了什么问题?

$sql->query("SELECT count(offers.id) as offers_count FROM offers LEFT JOIN images ON images.offer_id = offers.id AND images.file_type = 3 WHERE $where"); //$where is what is searched from user


$SQL = "SELECT  images.filename, * FROM offers LEFT JOIN images ON images.offer_id = offers.id AND images.file_type = 3 WHERE  $where $result LIMIT 12 OFFSET ".($page-1)*12);

for ($i=0; $i<$sql->getNumRows(); $i++) {
$obj = $sql->getRow($i);
offers::show_offer($obj); 
}

function show_offer($offer_obj) {
$img = $offer_obj['filename']; 
$picture = '<img src="/'.$img.'"  />';
echo '<div>';
echo $picture; 
//some other info I show
echo '</div>';

}
丹尼尔·特鲁斯

由于WHERE子句中的这种情况,这不能工作:

images.file_type = 3

对于在LEFT JOIN右侧不匹配的行,SQL引擎会将NULL放入与右侧表相对应的所有列中。然后,条件images.file_type = 3被评估为false,images.file_typeNULL被评估因此,消除了没有图像的行。

实际上,此条件取消了LEFT JOIN的作用,使其等效于INNER JOIN(与单独的JOIN相同)

您可以通过file_type在LEFT JOIN之前应用限制来解决此问题,如下所示:

SELECT i.somecolumn, offers.* FROM
    offers
 LEFT JOIN
   (select * from images WHERE file_type=3) AS i
 ON i.offer_id = offers.id 
 WHERE  $where ...

确保中的其他子句$where也不是ON image。*列的条件,否则必须类似地对其进行处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查询中的 SUM、GROUP BY 和 LEFT JOIN

来自分类Dev

使用 Left Join 的 SQL 查询中的问题

来自分类Dev

Laravel join 和 left join 在一个查询中

来自分类Dev

使LEFT JOIN查询更高效

来自分类Dev

SQL DELETE LEFT JOIN查询

来自分类Dev

使用 LEFT JOIN 查询 MongoDB

来自分类Dev

Django如何在LEFT JOIN中传递子查询

来自分类Dev

LEFT / RIGHT JOIN中的子查询过滤器

来自分类Dev

如何使用主查询中的LEFT JOIN和子查询中的INNER JOIN优化MySQL SELECT查询?

来自分类Dev

JOIN查询在Node-postgres中不起作用

来自分类Dev

在我的案例Postgres查询中如何使用join?

来自分类Dev

cakePHP中的mySQL Join查询

来自分类Dev

MySQL查询Select,SUM,LEFT JOIN

来自分类Dev

是多个查询还是LEFT JOIN更快?

来自分类Dev

使用子查询语法的LEFT OUTER JOIN

来自分类Dev

如何使用SQL LEFT JOIN查询

来自分类Dev

需要帮助编写查询(LEFT JOIN)

来自分类Dev

使用WHERE子句的MySQL LEFT JOIN查询

来自分类Dev

使用COUNT ON LEFT JOIN进行MySQL查询

来自分类Dev

MySQL查询Select,SUM,LEFT JOIN

来自分类Dev

使用LEFT OUTER JOIN建立查询结果

来自分类Dev

Mysql Left OUTER JOIN与子查询(wordpress)

来自分类Dev

如何使用SQL LEFT JOIN查询

来自分类Dev

2个表的LEFT JOIN查询失败

来自分类Dev

LEFT JOIN查询返回双精度结果

来自分类Dev

使用 LEFT JOIN 进行慢速 SQL 查询

来自分类Dev

MySQL查询Left Join问题获取数据

来自分类Dev

使用INNER JOIN和LEFT JOIN的MySQL查询

来自分类Dev

Postgres INNER JOIN 查询问题