[英]AWS Aurora DB Combine Data from Multiple SQL Statements
我有三個帶有數據模式的表,例如:
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);
}
};
如果對另一個表summary
或actions
進行相同的actions
,它也可以工作。 現在,我需要組合這三個表的所有列,然后返回數據(返回的行應根據req_id
匹配)。 我的工作片段: https : //dbfiddle.uk/? rdbms = mysql_5.7 & fiddle =016ecc94c792611fbaca810605e81a6a
但最終獲得的結果包含重復形式的user_id
列,即三倍包含。 我不需要重復三次相同的列。
我對處理 MySQL 查詢有點陌生,因此即使表存在也無法找出錯誤的確切原因。 Aurora 中使用的 MYSQL 版本是 5.7。
任何幫助解決相同的問題表示贊賞!
嘗試這個
SELECT users.*, summary.* from users, summary WHERE users.user_id = summary.user_id
或者
SELECT * from users, summary WHERE users.user_id = summary.user_id
計划 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
); 您也可以將所有列都放在一個表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.