sql >> Databáze >  >> RDS >> Mysql

Může dotaz MySQL změnit řádky na sloupce?

Někdy je prvním krokem k vyřešení vašeho problému vědět, jak se tomu říká. Poté už stačí jen googlovat. To, co se pokoušíte vytvořit, se nazývá kontingenční tabulka nebo křížový přehled . Zde je odkaz vysvětlující, jak vytvořit kontingenční tabulky v MySQL . A zde je podrobnější návod .

AKTUALIZACE:

Nyní, když jste aktualizovali otázku, mám jasnější představu o tom, čeho se snažíte dosáhnout. Dám vám alternativní řešení, které je podobné, ale ne přesně co chcete na základě GROUP_CONCAT MySQL funkce.

select t1.FirstName, t1.LastName, group_concat(concat(t2.FirstName, ' ', t2.LastName))
from member_information as t1
left outer join member_dependent_information as t2 on t2.MemberID=t1.MemberID
group by t1.MemberID;

Tento dotaz jsem ověřil následovně. Nejprve nastavení:

create table member_information (
    MemberID int unsigned auto_increment primary key,
    FirstName varchar(32) not null,
    LastName varchar(32) not null
) engine=innodb;

create table member_dependent_information (
    MemberID int unsigned not null,
    FirstName varchar(32) not null,
    LastName varchar(32) not null,
    Type int unsigned not null,
    foreign key (MemberID) references member_information(MemberID)
) engine=innodb;

insert into member_information (MemberID, FirstName, LastName) values
(1, 'John', 'Harris'),
(2, 'Sarah', 'Thompson'),
(3, 'Zack', 'Lewis');

insert into member_dependent_information (MemberID, FirstName, LastName, `Type`) values
(1, 'Amy', 'Harris', 1),
(2, 'Bryan', 'Thompson', 1),
(2, 'Dewey', 'Thompson', 2),
(2, 'Tom', 'Thompson', 2),
(3, 'Harry', 'Lewis', 2),
(3, 'Minka', 'Lewis', 1);

A nyní dotaz a výsledky:

mysql> select t1.FirstName, t1.LastName, group_concat(concat(t2.FirstName, ' ', t2.LastName))from member_information as t1
    -> left outer join member_dependent_information as t2 on t2.MemberID=t1.MemberID
    -> group by t1.MemberID;
+-----------+----------+------------------------------------------------------+
| FirstName | LastName | group_concat(concat(t2.FirstName, ' ', t2.LastName)) |
+-----------+----------+------------------------------------------------------+
| John      | Harris   | Amy Harris                                           | 
| Sarah     | Thompson | Bryan Thompson,Dewey Thompson,Tom Thompson           | 
| Zack      | Lewis    | Harry Lewis,Minka Lewis                              | 
+-----------+----------+------------------------------------------------------+
3 rows in set (0.00 sec)


  1. jak najít přesně data mezi vybranou diagonální oblastí v dotazu mysql

  2. Sekvence provádění klauzule Seskupit podle, Mít a Kde v SQL Server?

  3. Vraťte seskupený seznam s výskyty pomocí Rails a PostgreSQL

  4. Cizí klíč MySQL InnoDB mezi různými databázemi