两表进行左连接,两表各选择前两列作为键值,生成对应C++代码
假设两个表分别为table1和table2,它们各有三列,分别为col1、col2、col3。
以下是生成对应C++代码的步骤:
- 定义两个vector,分别存储table1和table2的键值对。
vector<pair<int, int>> table1Keys;
vector<pair<int, int>> table2Keys;
- 遍历table1和table2,将每条记录的前两列作为键值对存入对应的vector中。
for (int i = 0; i < table1.size(); i++) {
table1Keys.push_back(make_pair(table1[i][0], table1[i][1]));
}
for (int i = 0; i < table2.size(); i++) {
table2Keys.push_back(make_pair(table2[i][0], table2[i][1]));
}
- 定义一个vector,存储左连接后的结果。
vector<vector<int>> result;
- 遍历table1的键值对,对于每个键值对,在table2的键值对中查找是否有相同的键值。如果有,则将table1和table2中对应的记录合并成一条记录,并存入结果中;如果没有,则将table1中对应的记录合并成一条记录,将table2中缺失的列填充为0,并存入结果中。
for (int i = 0; i < table1Keys.size(); i++) {
bool found = false;
for (int j = 0; j < table2Keys.size(); j++) {
if (table1Keys[i] == table2Keys[j]) {
vector<int> mergedRecord;
mergedRecord.insert(mergedRecord.end(), table1[i].begin(), table1[i].end());
mergedRecord.insert(mergedRecord.end(), table2[j].begin() + 2, table2[j].end());
result.push_back(mergedRecord);
found = true;
break;
}
}
if (!found) {
vector<int> mergedRecord;
mergedRecord.insert(mergedRecord.end(), table1[i].begin(), table1[i].end());
mergedRecord.insert(mergedRecord.end(), 2, 0);
result.push_back(mergedRecord);
}
}
- 输出结果。
for (int i = 0; i < result.size(); i++) {
for (int j = 0; j < result[i].size(); j++) {
cout << result[i][j] << " ";
}
cout << endl;
}
原文地址: https://www.cveoy.top/t/topic/vRa 著作权归作者所有。请勿转载和采集!