gpt4 book ai didi

mysql - AWS Aurora DB 合并来自多个 SQL 语句的数据

转载 作者:行者123 更新时间:2023-12-01 23:42:55 25 4
gpt4 key购买 nike

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

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 处理函数以下列方式简单地获取:

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);
}
};

如果对另一个表 summaryactions 进行相同操作,它也可以工作。现在,我需要合并这三个表的所有列,然后返回数据(返回的行应根据 req_id 进行匹配)。我的工作片段:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=016ecc94c792611fbaca810605e81a6a

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

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

感谢任何解决相同问题的帮助!

最佳答案

方案 A:明确指定所需的列。额外的好处:您可以摆脱 id,这对于阅读输出的其他人来说往往是无用的。

B 计划:(这个选项并不总是可行的。)而不是 JOIN .. ON t1.a = t2.a,说 JOIN .. USING(a)

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

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)

一般来说,建立 1:1 的关系是不明智的(就像您通过 user_id 建立的那样);您也可以将所有列都放在一个表中。

关于mysql - AWS Aurora DB 合并来自多个 SQL 语句的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64752921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com