У меня есть две таблицы NEW_TBL и CURRENT_TBL.
Значения в CURRENT_TBL необходимо обновить, чтобы они были равны NEW_TBL. Обе таблицы имеют PK с именем tableId, но столбцы в NEW_TBL не всегда будут соответствовать CURRENT_TBL. У меня уже есть то, что мне нужно, чтобы схема была такой же, но мне нужен метод для обновления значений CURRENT_TBL на основе динамической ссылки на столбец.
Вот надуманный пример того, как я мог бы сделать это в javascript.
Начальные таблицы:
currentTable = [
['tableId','col2','col3','col4'],
['1','purple','blue','pink'],
['2','purple','red','orange'],
['3','green','yellow','purple']
];
newTable = [
['tableId','col2','col3','col4'],
['1','','blue','pink'],
['2','magenta','blue','pink'],
['4','grey','black','white']
];
Функция:
function updateCurrentTable() {
var currentHeader = currentTable[0];
var newHeader = newTable[0];
var currentValues = currentTable.slice(1);
var newValues = newTable.slice(1);
var newIdList = newValues.map(function(val){ // Get list of newTable ids
return val[0];
})
var currentIdList = currentValues.map(function(val){ // Get list of newTable ids
return val[0];
})
for (var newColumn = 0; newColumn<newHeader.length; newColumn++) { // Loop through new table columns
var columnName = newHeader[newColumn];
var newIdColumn = newHeader.indexOf('tableId');
var currentColumnIndex = currentHeader.indexOf(columnName);
var currentIdIndex = currentHeader.indexOf('tableId');
if (columnName !== 'tableId') { // The tableId column is skipped because the id will never be altered
for (var newRow = 0; newRow<newValues.length; newRow++) { // Loop through new table rows
var newId = newValues[newRow][newIdColumn];
var newValue = newValues[newRow][newColumn];
if (currentIdList.indexOf(newId) < 0) { // If tableId exists in newTable but not in currentTable, add the row to currentTable
currentValues.push(newValues[newRow]);
currentIdList.push(newId); // Update the id list
}
for (var curRow =0; curRow < currentValues.length; curRow++) { // Loop through current table rows
var currentId = currentValues[curRow][currentIdIndex];
if (currentColumnIndex !== currentIdIndex) { // The tableId column is skipped because the id will never be altered
if (newIdList.indexOf(currentId) < 0) { // If tableId exists in currentTable but not newTable, remove the row from currentTable
currentValues.splice(curRow,1);
} else if (newId === currentId) { // If the tableIds match, update the value in the current column
currentValues[curRow][currentColumnIndex] = newValue;
}
}
}
}
}
}
Logger.log(currentValues)
}
Результат:
currentTable = [
['tableId','col2','col3','col4'],
['1','','blue','pink'],
['2','magenta','blue','pink'],
['4','grey','black','white']
];
Есть ли способ выполнить вышеперечисленное в SQL?
Спасибо!