Выбор суммы () из вторичной таблицы и объединение с первым выбором - PullRequest
0 голосов
/ 17 января 2019

Я использую библиотеку knex.js для выбора данных из первой таблицы с именем "empresas" и пытаюсь получить сумму ("sucursales.dotacion as sum") из второй таблицы с именем "sucursales".

Пока у меня есть этот рабочий код, использующий библиотеку knex.js для node.js

knex.schema.raw("SET sql_mode=''").then(() => {
    knex.select('*')
    .from('empresas')
    .leftJoin('sucursales', 'empresas.id', 'sucursales.id_empresas')
    .sum('sucursales.dotacion as sum')
    .groupBy('sucursales.id_empresas')
    .then((rows) => {
        for (row of rows) {


        result  +=  `${row['id']}` + "," 
                    + `${row['rut']}` + ","
                    + `${row['empresa']}` + ","
                    + `${row['razon_social']}` + ","
                    + `${row['email']}` + ","
                    + `${row['sum']}`
        result  += "<br/>";
        }

        res.send(JSON.stringify({ Sum : result}));
    })

})

Моя проблема, вывод только для идентификаторов, которые находятся в обеих таблицах, и мне нужны все идентификаторы из таблицы "empresas", а когда нет суммы (), просто установите его в NULL или 0.

Пока я пробовал внутреннее соединение, левое и правое соединение, я получил ошибку при полном внешнем соединении.

knex.select('empresas.id','empresas.rut','empresas.razon_social','empresas.email','sucursales.id_empresas','sucursales.dotacion')

Как мне присоединиться к mysql?

1 Ответ

0 голосов
/ 17 января 2019

У вас есть поля с одинаковыми именами в обеих таблицах, к которым вы присоединяетесь. Вам нужно явно перечислить поля, которые вы хотите выбрать, иначе mysql выберет любое из дублированных полей (в вашем случае использования, похоже, что выбран идентификатор из sucursales, который выдает NULL, если левое соединение не удалось ).

Это:

knex.select('*')

Должно быть записано как:

knex.select('empresas.id')

Также предложение GROUP BY должно относиться к empresas.id вместо sucursales.id.

...