当我进行查询时:
"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 *
无法控制结果集中的列、它们的名称和顺序。您应该使用显式列列表,并为两个表中具有相同名称的列提供一个别名,以便消除它们的歧义。