0
votes

Interroger les données de PostgreSQL à partir de deux tables

J'ai deux tables dans PostgreSQL pays et villes. J'utilise node-postgres pour nodejs.

DES PAYS

[{
  id: 1,
  country: 'USA',
  cities: [{
     id: 1,
     city: 'New York',
  },{
     id: 2,
     city: 'Chicago',
  },{
     id: 4,
     city: 'Boston',
  }] 
}, {
  id: 2,
  country: 'GERMANY',
  cities: [{
     id: 6,
     city: 'Berlin',
  }],
...
}]

VILLES

id    name          country_id
1     New York      1
2     Chicago       1
3     Hong Kong     3
4     Boston        1
5     Beijing       3
6     Berlin        2

Si possible. Puis-je obtenir des données comme?

id name
1  USA
2  GERMANY
3  CHINA


1 commentaires

Vous avez strictement besoin d'une sortie JSON?


3 Réponses :


1
votes

Dans Postgres, vous pouvez agréger comme:

select c.id, c.name,
       json_agg(json_build_object('id', ci.id, 'name', ci.name))  as cities
from countries c join
     cities ci
     on ci.country_id = c.id
group by c.id;

Cela renvoie le résultat en utilisant les types Postgres.

En tant que Json, cela ressemblerait à:

select c.id, c.name, array_agg( (ci.id, ci.name) ) as cities
from countries c join
     cities ci
     on ci.country_id = c.id
group by c.id;


0 commentaires

0
votes

Vous pouvez essayer une jointure interne Quelque chose comme ça fonctionnera

SELECT
   countries.id,
   countries.name,
   cities.id,
   cities.name
FROM
   countries
INNER JOIN countries ON cities counties.id = cities.country_id;

Pour plus d'informations, vous pouvez visiter la documentation postgreql


0 commentaires

0
votes

Vous pouvez essayer ce qui suit (effectué sur MySQL Workbench):

select a.id as ID, a.name as CityName,b.name as  CountryName from cities as a
INNER join couNtries as b on a.COUNTRY_id=b.id GROUP BY 2;


1 commentaires

Veuillez essayer la requête ci-dessus et j'ai utilisé Mysql Workbench