2017-12-15 2 views
0

Ich habe eine Abfrage erstellt, die sechs Tabellen verknüpft:Abfrage Tabelle mit mehreren verbundenen Werte

SELECT a.accession, b.value, c.name, d.description, e.value, f.seqlen, f.residues 
FROM chado.dbxref a inner join chado.dbxrefprop b on a.dbxref_id = b.dbxref_id 
inner join chado.biomaterial d on b.dbxref_id = d.dbxref_id 
inner join chado.feature f on d.dbxref_id = f.dbxref_id 
inner join chado.biomaterialprop e on d.biomaterial_id = e.biomaterial_id 
inner join chado.contact c on d.biosourceprovider_id = c.contact_id; 

Der Ausgang: enter image description here

Ich bin derzeit mit einem PostgreSQL Schema namens Chado (http://gmod.org/wiki/Chado_Tables) Arbeits . Meine Versuche, das bestehende Schema zu erfüllen, haben mich dazu veranlasst, mehrere verbundene Werte in derselben Tabelle zu hinterlegen (zwei verschiedene Werte innerhalb der Tabelle dbxrefprop, drei verschiedene Werte innerhalb der Biomaterialprop-Tabelle). Das Abfragen der Datenbank führt zu einer erheblichen Menge an redundanter Ausgabe. Gibt es eine Möglichkeit für mich, die Ausgabe-Redundanz zu reduzieren, indem ich meine Abfrage-Anweisung modifiziere? Im Idealfall würde ich die Ausgabe wie folgt zu ähneln:

test001 | GB0101 | source011 | Faaberg,K.; Lyoo,K.; Korol,D.M. | serum | T1 | Iowa, USA | 01 Jan 2005 | 1234 | AUGAACGCCUUGCAUUACUAUGACUAUGAUU 
+1

Ich denke, was Sie suchen ist so etwas wie Group_concat() in MySQL, ich bin nicht ein großer Postgresql-Benutzer, aber ich denke, ich fand etwas sehr ähnliches von dem, was group_concat in mysql tut. https://StackOverflow.com/questions/2560946/postgresql-group-concat-equivalent –

+0

Danke für die schnelle Antwort Michael T. Ich bin relativ neu in SQL und kämpfte darum, eine Frage zu artikulieren. Ein Beispiel war das Beste, was ich konnte, um mein Problem zu demonstrieren. Ich stimme zu, eine Funktion wie group_concat() scheint zu sein, was ich brauche. Ich werde es versuchen. Danke nochmal! – Ghoti

+1

ein besserer Weg, um die Frage zu schließen, wäre für @MIchaelT, es zu beantworten und die Rep-Punkte zu bekommen - oder - beantworte es selbst und akzeptiere es dann, auf diese Weise bekommen wir keine weitere unbeantwortete Frage. –

Antwort

0

Arbeitsabfrageanweisung:

SELECT a.accession, string_agg(distinct b.value, ' | ' ORDER BY b.value) AS bvalue_list, c.name, d.description, string_agg(distinct e.value, ' | ' ORDER BY e.value) AS evalue_list, f.seqlen, f.residues 
FROM chado.dbxref a INNER JOIN chado.dbxrefprop b ON a.dbxref_id = b.dbxref_id 
INNER JOIN chado.biomaterial d ON b.dbxref_id = d.dbxref_id 
INNER JOIN chado.feature f ON d.dbxref_id = f.dbxref_id 
INNER JOIN chado.biomaterialprop e ON d.biomaterial_id = e.biomaterial_id 
INNER JOIN chado.contact c ON d.biosourceprovider_id = c.contact_id 
GROUP BY a.accession, c.name, d.description, f.seqlen, f.residues; 
Verwandte Themen