web-dev-qa-db-fra.com

Obtenir des données de plusieurs sous-requêtes SELECT pour générer des rapports depuis la base de données MySQL

J'essaie de réaliser est de créer une requête complexe composée de quelques sous-requêtes. L'idée est de permettre à un homme d'affaires de s'exécuter chaque semaine pour extraire des données de reporting.

L'effet serait similaire à la requête ci-dessous, où toutes les données de nombreuses tables sont affichées dans un seul résultat.

select * from table1, table2, table3

J'ai donc besoin de quelque chose comme ça, mais ça ne marche pas.

select 
    (select * from   table1 where ...... ) as table1,
    (select * from   table2 where....... ) as table2

Manuellement, je pouvais exécuter les sous-requêtes séparément, puis ajouter manuellement les résultats dans une grande feuille Excel. Mais je veux faciliter la tâche à l'homme d'affaires et minimiser les erreurs.

Est-ce possible dans MySQL? 

La raison en est que je convertis des instructions Oracle PIVOT SQL existantes en équivalence MySQL et que les sous-requêtes sont assez complexes.

Je peux fournir le SQL Oracle si nécessaire.

Très apprécié comme toujours.

12
user1775967

Après quelques manipulations:

select * from
    (select * from   table1 where survey_user_id=4 ) as T1
    ,
    (select * from   table2 where survey_field_type_id=100 ) as T2
    ,
    (select * from table3  )  as T3
20
user1775967

Si je vous comprends bien, vous avez juste besoin de UNION: D

(SELECT column1 AS name1, column2 AS name2 FROM table1 WHERE ...... )
UNION
(SELECT column3 AS name1, column4 AS name2 FROM table2 WHERE ...... )
UNION
....

Comme mentionné ci-dessous dans le commentaire, les colonnes Doivent avoir le même nom (vous pouvez utiliser des alias) et rester dans le même ordre.

10
tkeram
select main.*,
(select col from tbl1 where tbl1.id=main.id) as col1,
(select col from tbl2 where tbl2.id=main.id) as col2,
(select col from tbl3 where tbl3.id=main.id) as col3
from master as main
0
user3600754