【发布时间】:2021-10-01 05:31:56
【问题描述】:
我在 Mysql 中使用 NodeJS 进行复杂查询。首先,我需要从entitytag 表中获取tagid1、tagid2 和tagid3。然后我需要使用这些获取的 tagid 来获取 tags 表中每个 tagid 的标记名。这是一个产生错误的查询,告诉我“未定义 tagid1”。
row_c = await db.query( `SELECT
ap.audioname,
ap.userid,
ap.audioid,
ap.title,
ap.likes,
u.gavatar,
u.name,
u.email,
(SELECT tagid1 FROM entitytag et LEFT JOIN tags t on t.tagid = et.tagid1 WHERE et.audioid = ap.audioid)tagid1,
(SELECT tagid2 FROM entitytag et LEFT JOIN tags t on t.tagid = et.tagid2 WHERE et.audioid = ap.audioid)tagid2,
(SELECT tagid3 FROM entitytag et LEFT JOIN tags t on t.tagid = et.tagid3 WHERE et.audioid = ap.audioid)tagid3,
(SELECT tagname FROM tags WHERE tagid = ?),
(SELECT tagname FROM tags WHERE tagid = ?),
(SELECT tagname FROM tags WHERE tagid = ?)
FROM audioposts ap LEFT JOIN accounts u ON u.id = ap.userid WHERE ap.audioid = ?`, [tagid1, tagid2, tagid3, audioid ]);
其实我并不需要tagid1、tagid2、tagid3的返回。我只是使用它们从标签表中获取标签名。
我做错了什么?如何定义“tagid1”?
【问题讨论】:
-
您的参数 (
[audioid, tagid1, tagid2, tagid3 ]) 似乎顺序错误。它们应该与查询中的?的顺序相同 -
好发现!我已经编辑了这个问题,所以你的观察很有帮助。但不幸的是它仍然没有解决问题。
标签: mysql node.js select concatenation left-join