2013-03-06 12 views
7

Próbuję osiągnąć to utworzenie jednego złożonego zapytania składającego się z kilku pod-zapytań. Chodzi o to, aby osoba biznesowa mogła co tydzień pobierać dane do raportowania.Pobieranie danych z wielu zapytań SELECT do raportowania z bazy danych MySQL

Efekt będzie podobny do poniższego zapytania, w którym wszystkie dane z wielu tabel są wyświetlane w jednym wyniku.

select * from table1, table2, table3 

Potrzebuję czegoś takiego, ale to nie działa.

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

Ręcznie, mogę osobno uruchomić kwerendy, a następnie ręcznie dołączyć wyniki do jednego dużego arkusza programu Excel. Ale chcę, aby osoba biznesowa łatwiej to zrobiła i zminimalizowała błędy.

Czy to możliwe w MySQL?

Powodem tego jest konwertowanie starszych instrukcji Oracle PIVOT SQL na równoważnik MySQL, a pod-zapytania są dość złożone.

W razie potrzeby mogę dostarczyć Oracle SQL.

Bardzo doceniane jak zawsze.

+0

sql oracle rzeczywiście pomoże. – Sebas

Odpowiedz

10

Po jakiś błahy wokół:

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

Jeśli rozumiem zostanie poprawnie wystarczy UNII: D

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

Jak wspomniano poniżej w komentarzu, kolumny muszą mieć taką samą nazwę (ci może używać aliasów) i pozostać w tej samej kolejności.

+1

Pod warunkiem, że kolumny są tej samej kolejności i typów danych, w przeciwnym razie dusić. – DRapp

+0

Dobrze, już edytowane, thx :) – tkeram

+0

Związek będzie dołączać wyniki każdego zapytania do zestawu wyników i przy założeniu wyrównania kolumn. Za pomocą rozwiązania @ user1775967 kolumny można wybierać spośród dowolnych zapytań przy założeniu, że wiersze są wyrównane. – 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

Odpowiadając na pytanie, proszę podać wyjaśnienie, co robisz lub dlaczego rozwiązuje oryginalne pytanie. –

Powiązane problemy