Obtenga un árbol de padres e hijos con pg-promise

Yo uso elpg-promise biblioteca conbluebird para hacer consultas dependientes. Tengo dos tablas, ayb, que se ven así:

|   a   |     |   b   |  
|-------|     |-------|
| a_id  |     | b_id  |
| prop1 |     | prop2 |
              |  b_a  |

dóndeb.b_a es una referencia aa.a_id. Quiero seleccionar todas las entradas que coincidan con un determinadoprop1 y el resultado debe contener todas las coincidenciasa-rows más el correspondienteb-filas para cadaa. Esto debería ser factible con dos consultas dependientes. Ambas consultas pueden devolver múltiples resultados.

Si mesaa solo devuelve una fila, puedo hacer esto:

function getResult(prop1) {
    return db.task(function (t) {
        return t.one("select * from a where prop1=$1", prop1)
            .then(function (a) {
                return t.batch([a, t.any("select * from b where b_a=$1", a.a_id)]);
            })
            .then(function (data) {
                var a = data[0];
                var bs = data[1];
                bs.forEach(function (b) {
                    b.a = a;
                });
                return bs;
            });
    });
}

Y también puedo hacer coincidir todosbentradas para múltiplesa-resultados como este:

function getResult(prop1) {
    return db.task(function (t) {
        return t.many("select * from a where prop1=$1", prop1)
            .then(function (as) {
                var queries = [];
                as.forEach(function (a) {
                    queries.push(t.any("select * from b where b_a=$1", a.id));
                });
                return t.batch(queries); // could concat queries with as here, but there wouldn't be a reference which b row belongs to which a row
            })
            .then(function (data) {
                // data[n] contains all matching b rows
            });
    });
}

¿Pero cómo reunir a esos dos?

Respuestas a la pregunta(1)

Su respuesta a la pregunta