Hice una consulta de selección con varias tablas usando uniones. En la base de datos, tengo algunos datos que tienen la misma identificación pero 1 o 2 columnas tienen valores diferentes. Cuando ejecuto la consulta, obtengo (por ejemplo) 2 objetos que tienen los mismos datos (para las primeras 3 columnas), excepto una sola columna que tiene un valor diferente. Ahora, en la base de datos, tengo varios de estos, por lo que obtendría entre 10 y 20 objetos y algunos de ellos son "duplicados", con la única diferencia de que es una de estas columnas. Es posible hacer una consulta que me traiga estos datos sin los "duplicados". Entonces, las columnas que tienen el mismo valor deben ser iguales, pero la columna en la que los datos son diferentes debe estar en una matriz (por lo tanto, tenga todos los datos 'diferentes' en el mismo lugar).
Ejemplo:
{ "user": "USER1", "work": "Barista", "first_name": "Ben", "email": "ben@gmail.com", "city": "Paris" }, { "user": "USER1", "work": "Barista", "first_name": "Ben", "email": "ben@gmail.com", "city": "Lyon" }Entonces, arriba tengo 2 filas con los mismos datos y solo la columna de la ciudad es diferente, así que cuando llamo a Query obtengo estos 2 objetos. ¿Sería posible que, en cambio, obtenga algo como esto de la consulta o formatee los datos después de la consulta por varios datos?
{ "user": "USER1", "work": "Barista", "first_name": "Ben", "email": "ben@gmail.com", "city": [ { city1: Paris }, { city2: Lyon } ] }¿Es posible consultar datos como este desde SQL o al menos formatearlos después de que varios cuerpos de datos provengan de la consulta usando javascript?
No puede hacerlo en SQL simple, ya que siempre devolverá datos en filas. Lo que probablemente quieras es usar algún tipo de ORM (por ejemplo, https://sequelize.org/ ).
Podría hacerlo con javascript pero podría ensuciarse. Algo como esto (no probado):
const newArray = []; data.forEach((item) => { const exists = newArray.find( (el) => el.user === item.user && el.work === item.work && el.first_name === item.first_name ); if (exists) { exists.city.push(item.city); } else newArray.push({ ...item, city: [item.city] }); });