2013-03-06 8 views
7

Sto cercando di raggiungere è quello di creare una query complessa costituita da alcune sottoquery. L'idea è quella di darlo a una persona di affari per eseguire su base settimanale per tirare i dati dei rapporti.Ottieni dati da più sottoquery SELECT per i rapporti dal database MySQL

L'effetto sarebbe simile alla query seguente, in cui tutti i dati di molte tabelle sono visualizzati in un risultato.

select * from table1, table2, table3 

Quindi ho bisogno di qualcosa del tipo, ma non funziona.

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

manualmente, ho potuto eseguire il sub-query a parte, quindi accodare manualmente i risultati in un unico grande foglio Excel. Ma voglio rendere più facile per l'uomo d'affari farlo e minimizzare gli errori.

È possibile in MySQL?

La ragione di ciò è che sto convertendo un istruzioni SQL Oracle PIVOT legacy nell'equivalenza di MySQL e le sottoquery sono piuttosto complesse.

Posso fornire l'SQL Oracle se necessario.

Molto apprezzato come sempre.

+0

l'oracle sql sarebbe davvero d'aiuto. – Sebas

risposta

10

Dopo un po 'armeggiare intorno:

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 
5

Se ho capito bene si solo bisogno UNION: D

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

Come detto soffietto in commento, colonne devono avere lo stesso nome (si può usare alias per esso) e rimanere nello stesso ordine.

+1

A condizione che le colonne siano dello stesso ordine e dei tipi di dati, altrimenti soffocerebbe. – DRapp

+0

A destra, già modificato, thx :) – tkeram

+0

Un'unione aggiungerà i risultati di ogni query al set di risultati e con l'ipotesi che le colonne siano allineate. Con la soluzione di @ user1775967, le colonne possono essere selezionate da una qualsiasi delle query con il presupposto che le righe siano allineate. – Mouscellaneous

0
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

Quando rispondi a una domanda, aggiungi qualche spiegazione su cosa stai facendo o perché risolve la domanda originale. –

Problemi correlati