Postgresql Null值在执行左联接时填充左表.为什么会发生这种情况



当我进行查询时:

"select * from asset a where (a.login_id = $1) and (a.status = 'pub')";

我得到了预期的结果:

{
id: 23f8jfj8gh2,
name: 'Asset1',
status: 'pub',
create_date: 2020-11-12T07:00:00.000Z,
...
}

但是当我在查询中添加左联接时,如下所示:

"select * from asset a left join asset_image i on (a.id = i.asset_id) where (a.login_id = $1) and (a.status = 'pub')";

我回来了:

{
id: null,  <---- THIS NULL VALUE for the asset id
name: 'Asset1',
status: 'pub',
create_date: 2020-11-12T07:00:00.000Z,
...
asset_id: null,
orig_name: null,
mimetype: null,
created: null
}

我是SQL的新手,我看过左联接的文档,但我似乎不知道这到底是哪里出了问题。任何帮助都将不胜感激!谢谢

如果asset_image表包含自己的名称为id的列,当您的查询在(a.id = i.asset_id)之间不匹配时,它将用null覆盖id字段。

您可能需要为每个表id列定义一个更独特的名称,例如

  • asset_id替换asset表中的id
  • image_id替换asset_image表中的id

您的问题可能是SELECT *中的*,这是您在代码中应该始终避免的。

如果表asset_image也有一个名为id的列,则结果集将包含两个列,名称为id。你可能看错了。

使用SELECT *无法控制结果集中的列、它们的名称和顺序。您应该使用显式列列表,并为两个表中具有相同名称的列提供一个别名,以便消除它们的歧义。

相关内容

最新更新