Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql AWS Aurora DB组合来自多个SQL语句的数据_Mysql_Node.js_Amazon Web Services_Aurora - Fatal编程技术网

Mysql AWS Aurora DB组合来自多个SQL语句的数据

Mysql AWS Aurora DB组合来自多个SQL语句的数据,mysql,node.js,amazon-web-services,aurora,Mysql,Node.js,Amazon Web Services,Aurora,我有三个带有数据模式的表,如: TABLE user ( user_id BINARY(16) PRIMARY KEY NOT NULL, created DATETIME NOT NULL, last_updated DATETIME, coordinator BINARY(16), num_updates INT NOT NULL ); TABLE summary ( user_id BINARY(16) PRIMARY KEY NOT

我有三个带有数据模式的表,如:

TABLE user (
    user_id BINARY(16) PRIMARY KEY NOT NULL,
    created DATETIME NOT NULL, 
    last_updated DATETIME,
    coordinator BINARY(16),
    num_updates INT NOT NULL
);


TABLE summary (
    user_id BINARY(16) PRIMARY KEY NOT NULL,
    calculation_time DATETIME NOT NULL,
    calculation_method VARCHAR(25) NOT NULL,
    label VARCHAR(50) NOT NULL,
    critical_count INT NOT NULL,
    median_risk FLOAT(10)
);

TABLE actions(
        user_id BINARY(16) PRIMARY KEY NOT NULL,
        label VARCHAR(50) NOT NULL,
        access_count INT NOT NULL,
        median  FLOAT(10)
    );
使用lambda handler函数以以下方式获取所有用户用户表的数据:

const AWS = require('aws-sdk');
const rdsDataService = new AWS.RDSDataService();

module.exports.hello = async (event, context, callback) => {
  const req_id = "5a9dbfca-74d6-471a-af27-31beb4b53bb2";
  const sql = 'SELECT * FROM user WHERE user_id=:id';

  try {
    const params = {
      resourceArn: 'arn:aws:rds:us-west-********************',
      secretArn: 'arn:aws:secretsmanager:us-west**************',
      sql,
      database: 'dev_db1',
      continueAfterTimeout: true,
      includeResultMetadata: true,
      parameters: [{ 'name': 'id', 'value': { 'stringValue': `${req_id}` } }]
    }

    const db_res = await rdsDataService.executeStatement(params).promise();
    
    const convertToJson = (dbresponse) => {
    const columns = dbresponse.columnMetadata.map(col => col.name);
    const row_data = dbresponse.records.map(row => {
        const json_obj = {};
        row.map((val, i) => {
            json_obj[columns[i]] = Object.values(val)[0];
        });
        return json_obj;
    });
    return row_data;
    };
    
    const modified_data = convertToJson(db_res);

    const response = {
      body: {
        statusCode: 200,
        message: 'Data fetched successfully',
        data: modified_data,
      }
    };

    callback(null, response);

  } catch (error) {
    console.log('Error Received', error);
    const error_res = {
      body: {
        statusCode: error.statusCode,
        message: error.message,
        data: null
      }
    }
    callback(null, error_res);
  }
};
如果另一个表摘要或操作也遵循同样的方法,那么它也会起作用。现在,我需要组合这三个表的所有列,然后返回返回的数据行应该根据req_id进行匹配。 我的工作片段:

但获得的最终结果包含重复形式的列user_id,即包含三次。我不需要同一列重复三次

我对处理MySQL查询有点陌生,所以即使在表存在的情况下也无法找出错误的确切原因。Aurora中使用的MYSQL版本是5.7

如果您有任何帮助,我们将不胜感激

试试这个

SELECT users.*, summary.* from users, summary WHERE users.user_id = summary.user_id


计划A:明确指定所需的列。额外的好处:您可以去掉ID,这对于其他读取输出的人来说是无用的

计划B:这个选项并不总是可行的。而不是加入。。在t1.a=t2.a时,说JOIN。。乌辛加

我喜欢用短别名。下面是一起做所有事情:

SELECT  u.last_name,  u.first_name, 
        s.risk_score,
        t.likes
    FROM  user AS u
    JOIN  summary AS s  USING(user_id)
    LEFT JOIN  test AS t  USING(user_id)

一般来说,通过用户id建立1:1的关系是不明智的;您也可以将所有列都放在一个表中。

忘记将代码标记为代码段,因为没有显示星号。即使这样,也可以使用SELECT*from users,summary WHERE user.user_id=summary.user_id实际上我不想逐个显式地选择列名。因为在实际情况中,所有三个或更多的表都将包含超过4-5列。单独提取所有列名会很笨拙。那么,我有没有办法从t1、t2、t3中选择*那么,B计划-使用id完全符合您的要求-避免重复显示id。是的,您的答案完全正确&解决了重复id列的问题。但我还在想,如果有一种方法,我们不象在planB中那样明确地选择每个列名,那么我们可能会不赞成选择*,因为有一天你可能会添加一列,从而破坏输出。如果将列列表保留为INSERT,情况可能会更糟。同样感谢您。如果可能的话,你能帮我了解一下AWS吗?是否可以在AWS RDS处理程序中传递多个SQL语句?
SELECT  u.last_name,  u.first_name, 
        s.risk_score,
        t.likes
    FROM  user AS u
    JOIN  summary AS s  USING(user_id)
    LEFT JOIN  test AS t  USING(user_id)