Выбрать и упорядочить одинаковые столбцы из разных таблиц - PullRequest
0 голосов
/ 21 мая 2019

У меня есть база данных MySQL с несколькими таблицами, и эти таблицы содержат несколько одинаковых столбцов, и я хочу поместить эти данные в электронную таблицу Google.

Например:

table1 содержит id, name, page и несколько столбцов, специфичных для этой таблицы.

table2 содержит id, name, page и паруразличные столбцы

table3 также имеют id, name, page и другие уникальные столбцы и т. д.

Это мой код:

function readFromTable() {
  var ss = SpreadsheetApp.getActive();
  var sheetDetails = ss.getSheetByName('Details');
  var sheetData = ss.getSheetByName('Clients');

  var host = sheetDetails.getRange("B1").getValue();
  var databaseName = sheetDetails.getRange("B2").getValue();
  var userName = sheetDetails.getRange("B3").getValue();
  var password = sheetDetails.getRange("B4").getValue();
  var port = sheetDetails.getRange("B5").getValue();

  var url = 'jdbc:mysql://'+host+':'+port+'/'+databaseName;
  Logger.log(url);
  Logger.log(userName);
  Logger.log(password);
  var sql = 'SELECT id, name, page FROM table1 UNION SELECT id, name, page FROM table2 UNION SELECT id, name, page FROM table3';
try{
  var connection = Jdbc.getConnection(url, userName, password);

  var results = connection.createStatement().executeQuery(sql);
  var metaData = results.getMetaData();
  var columns = metaData.getColumnCount();

// Retrieve metaData to a 2D array
   var values = [];
   var value = [];
   var element = '';

// Get table headers
   for(i = 1; i <= columns; i ++){
   element = metaData.getColumnLabel(i);
   value.push(element);
}
   values.push(value);

// Get table data row by row
   while(results.next()){
   value = [];
   for(i = 1; i <= columns; i ++){
    element = results.getString(i);
    value.push(element);
  }
  values.push(value);
}

// Cloese connection
   results.close();

// Write data to sheet Data
SpreadsheetApp.flush();
sheetData.getRange(2, 1, values.length, value.length).setValues(values);
SpreadsheetApp.getActive().toast('The data has been updated.');
}catch(err){
SpreadsheetApp.getActive().toast(err.message);
} 
}

Можно ли выбрать идентификатор, имя и страницу из всех трех таблиц в одном запросе и получить результат в порядке поступления?Я ввел один и тот же идентификатор в каждую таблицу, то есть 1 в table1, 1 в table2 и 1 в table3 в этом порядке, затем я сделал то же самое с 2 и т. д., вот как должен выглядеть вывод:

id name page

1 name1 toys

1 name2 food

1 name3 electronics

2 name4 toys

2 name5 food

2 name6 electronics

3 name7 toys

3 name8 food

3 name9 electronics

Но в выводе они группируются по таблице, и это не работает:

id name page

1 name1 toys

2 name4 toys

3 name7 toys

1 name2 food

2 name5 food

3 name8 food

1name3 electronics

2 name6 electronics

3 name9 electronics

Я бы выложил картинку, но яне имеюдостаточно репутации.

Мне нужен выход в порядке прибытия, какие-либо предложения?

1 Ответ

0 голосов
/ 21 мая 2019

Вы можете использовать ORDER BY предложение:

var sql = '(SELECT id, name, page FROM table1) UNION (SELECT id, name, page FROM table2) UNION (SELECT id, name, page FROM table3) ORDER BY id';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...