/ / Linhas que são semelhantes em todas as colunas, exceto uma - mysql, sql, jdbc

Linhas que são semelhantes em todas as colunas, exceto uma - mysql, sql, jdbc

Eu não tenho certeza do que isso é chamado, mas acontece o tempo todo que você obtém um conjunto de resultados como:

(id,name,age,favorite)
0,John Smith,21,Pepperoni
1,John Smith,21,Ham
2,John Smith,21,Olives
3,John Doe,54,Tomatoes
4,John Doe,54,Potatoes

Agora, quando você está iterando sobre esse conjunto de resultados, como concatear a última coluna em linhas que têm semelhante name e ages? Para obter um resultado como John Smith,21,"Pepperoni,Ham,Olives". E qual é essa ação chamada em geral? Eu estou usando o JDBC-MySQL se isso é importante.

obrigado

Respostas:

2 para resposta № 1

Esta ação pode ser feita com o GROUP_CONCAT no MySQL:

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

SELECT name, age, GROUP_CONCAT(favorite SEPARATOR ",")
FROM myTable
GROUP BY name, age

Tenha cuidado, o GROUP_CONCAT é apenas no MySQL e não em um SQL padrão.

Você não poderia fazer isso em outro DBMS com uma consulta.


2 para resposta № 2

No MySQL, você poderia fazer isso com group_concat:

select
id,
name,
age,
group_concat(favorite separator ",")
from
YourTable
group by
id,
name,
age

1 para resposta № 3

Seus dados são normalizado? Se estiver e seus favoritos estiverem armazenados em uma tabela separada, use GROUP_CONCAT para concatená-los.


1 para resposta № 4

Simplesmente:

select name, age, group_concat(favorite) group by name, age;

Você pode querer group_concat(distinct favorite), ou para especificar uma ordem por. (vírgula é o separador padrão.)

Os valores de group_concat serão truncados em um comprimento determinado da variável do servidor, mas isso não parece ser um problema neste caso.