2012-03-28 4 views
0

Dans mon application, j'ai une requête qui effectue plusieurs jointures avec une position de table. Juste comme ceci:Postgres - Récupère les données de chaque alias

SELECT * 
FROM (...) as trips 
join trip as t on trips.trip_id = t.trip_id 

left outer join vehicle as v on v.vehicle_id = t.trip_vehicle_id 

left outer join position as start on trips.start_position_id = start.position_id and start.position_vehicle_id = v.vehicle_id 

left outer join position as "end" on trips.end_position_id = "end".position_id and "end".position_vehicle_id = v.vehicle_id 

left outer join position as last on trips.last_position_id = last.position_id and last.position_vehicle_id = v.vehicle_id; 

Ma position de table a 35 colonnes (par exemple position_id).

Lorsque j'exécute la requête, le résultat devrait apparaître trois fois la position de la table, le début, la fin et la fin. Mais postgres ne peut pas distinguer, par exemple, start.position_id, end.position_id et last.position_id. Donc, ces 3 colonnes sont groupées et apparaissent comme une, position_id. Comme les données de start.position_id et end.position_id sont différentes, la colonne position_id, qui apparaît dans le résultat, est vide.

Sans avoir à renommer toutes les colonnes, comme ceci: start.position_id comme start_position_id.

Comment puis-je obtenir chaque groupe de données séparément, par exemple, obtenir toutes les colonnes de la table «démarrer». Dans MYSQL je peux faire cette opération en appelant fetch_fields, et donner à la fonction un alias, comme 'start'. Mais je peux le faire dans Postgres?

Cordialement, Nuno Oliveira

+0

Votre apparence de requête (au moins) incomplète. Mais je vais le mettre en forme un peu pour toi quand même. – wildplasser

+0

oui c'est incomplet, je viens de mettre le parte que j'ai des problèmes avec. C'est une énorme requête !! Merci –

+0

Il est difficile de comprendre votre question. Êtes-vous simplement trop paresseux pour taper la liste des noms de colonnes dans la clause 'SELECT ...'? – wildplasser

Répondre

1

Ma compréhension est que vous ne pouvez pas (ou mal à) entre discerner quelle table chaque colonne avec un nom commun (comme « position_id ») appartient, mais seulement besoin de voir l'un des ensembles de colonnes partagées à la fois. Si tel est le cas, utilisez tablename.* dans votre SELECT, de sorte que SELECT trips.*, start.*... affiche les colonnes des déclenchements et du début, mais pas les colonnes des autres tables impliquées dans la jointure.

SELECT [...,] start.* [,...] FROM [...] atable AS start [...]

+0

Ce n'est pas ça! Que je sais comment le faire. Le problème est différent! J'ai start.position_id, end.position_id et last.position_id. Ces 3 colonnes sont groupées, mais elles ne devraient pas l'être. Je veux savoir s'il y a une fonction qui donne l'alias, par exemple start, la fonction récupérera les données des colonnes, start.position_id, start.position_time, etc ... –

Questions connexes