Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите няколко записа срещу един запис въз основа на връзка?

Първоначалният въпрос беше специфичен за базата данни, но може би това е добро място да включите по-общ отговор. Това е често срещан въпрос. Концепцията, която описвате, често се нарича "групова конкатенация". Няма стандартно решение в SQL-92 или SQL-99. Така че ще ви трябва решение, специфично за доставчика.

  • MySQL - Използвайте вградената функция GROUP_CONCAT. Във вашия пример бихте искали нещо подобно:
select 
  o.ID, o.Address, o.OtherDetails,
  GROUP_CONCAT( concat(e.firstname, ' ', e.lastname) ) as Employees
from 
  employees e 
  inner join organization o on o.org_id=e.org_id
group by o.org_id
  • PostgreSQL - PostgreSQL 9.0 е също толкова прост сега, когато string_agg(expression, delimiter) е вграден. Ето го с „запетая“ между елементите:
select 
  o.ID, o.Address, o.OtherDetails,
  STRING_AGG( (e.firstname || ' ' || e.lastname), ', ' ) as Employees
from 
  employees e 
  inner join organization o on o.org_id=e.org_id
group by o.org_id

PostgreSQL преди 9.0 ви позволява да дефинирате свои собствени агрегатни функции с CREATE AGGREGATE. Малко повече работа от MySQL, но много по-гъвкава. Вижте това друга публикация за повече информация. (Разбира се, PostgreSQL 9.0 и по-нови версии също имат тази опция.)

  • Оракул - същата идея с помощта на LISTAGG .

  • MS SQL Server - същата идея с помощта на STRING_AGG

  • Резервно решение - в други технологии за бази данни или в много много стари версии на технологиите, изброени по-горе, нямате тези функции за групова конкатенация. В този случай създайте съхранена процедура, която приема org_id като вход и извежда конкатенираните имена на служители. След това използвайте тази съхранена процедура във вашата заявка. Някои от другите отговори тук включват някои подробности за това как да се напишат съхранени процедури като тези.

select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL – Обяснено кодиране и съпоставяне на набор от символи в базата данни

  2. MySQL потребителско дефинирана променлива в клауза WHERE

  3. Вземете сумата на MySQL колоната в PHP

  4. Sails не могат да се свържат с mySql

  5. Как да се свържете с MySQL база данни