NodeJs/Express、MySQL -使用另一个表的数组检索数组

yacmzcpb  于 2023-01-29  发布在  Mysql
关注(0)|答案(1)|浏览(159)

我有两张table:任务和更新。"任务"表包含ToDo项,而Updates表包含用户发送的任务的更新。更新通过每个表中匹配的taskId值与任务绑定。我有一组查询,它们成功提取了与用户权限匹配的所有任务(familyId)-我接下来需要做的是使用从第二个查询结果数组中提取的taskId列值来完成如下语句

SELECT taskUpdate FROM updates WHERE taskId = ?

但我不知道该怎么做。
以下是我目前拥有的:

// Get all tasks
Task.getAll = (userId, result) => {
  sql.query(`SELECT familyid FROM users WHERE id = '${userId}'`, (err, res) => {
    if (err) {
      console.log("Error selecting from USERS: ", err);
      return result(null, err);
    }
    sql.query("SELECT * FROM tasks WHERE familyId = ?", res[0].familyid, (err, res) => {
      if (err) {
        console.log("Error selecting from TASKS: ", err);
        return result(null, res);
      }
      console.log("tasks: ", res);
      return result(null, res);
    })
  });
};

您可以在第二个嵌套查询中看到,我检索了"tasks"中familyId与第一个查询的结果匹配的所有行。因此,现在我想使用taskId列来匹配Updates表中具有相同taskId值的行。我有一个模糊的想法,使用类似foreach循环的东西,但已经修修补补了一段时间,没有运气。
附录:应要求,以下是样本数据:

TASKS table 
taskId col: 200, 201...
taskName col: Test01, Test02...

UPDATES table
updateId: 1, 2...
taskId: 200, 201...
taskUpdate: "Checked garage", "Need to go to store"...

...每个中有更多列,但这里真正重要的列是每个中的taskId和Updates中的taskUpdate。
在"SELECT * FROM tasks WHERE familyId =?"中提取任务后,我们将拥有一个任务数组。我需要使用该数组中的taskId列值,并将所有生成的taskId值馈送到"SELECT taskUpdate FROM updates WHERE taskId =?"中,以便检索上面显示的taskUpdate值。

ltskdhd1

ltskdhd11#

您不需要获取所有taskId,然后查询Updates表并传递id数组。相反,您可以使用JOIN在单个查询中完成此操作。下面是一个示例,您可以遵循该示例:

SELECT t2.updateId, t2.taskId, t2.taskUpdate FROM
(SELECT * FROM TASKS WHERE familyId = '123') t1
JOIN UPDATES as t2 ON (t1.taskId =t2.taskId)

但是上面的查询将只给予UPDATES表中存在的taskId的行。
对于此查询,我们获取familyId与某个条件匹配的所有行,然后针对两个表中taskId相同的条件与UPDATES连接。

相关问题