2013-03-06 34 views
7

Tôi đang cố gắng đạt được là tạo một truy vấn phức tạp bao gồm một vài truy vấn phụ. Ý tưởng là đưa nó cho một người kinh doanh để chạy hàng tuần để lấy dữ liệu báo cáo.Nhận dữ liệu từ nhiều truy vấn con SELECT để báo cáo từ cơ sở dữ liệu MySQL

Hiệu ứng sẽ tương tự như truy vấn bên dưới, trong đó tất cả dữ liệu từ nhiều bảng được hiển thị trong một kết quả.

select * from table1, table2, table3 

Vì vậy, tôi cần một cái gì đó như thế, nhưng nó không hoạt động.

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

Theo cách thủ công, tôi có thể chạy các truy vấn con một cách riêng biệt, sau đó thêm kết quả vào một bảng tính lớn theo cách thủ công. Nhưng tôi muốn giúp người kinh doanh làm điều này dễ dàng hơn và giảm thiểu lỗi.

Điều này có thể thực hiện được trong MySQL không?

Lý do cho điều này là tôi đang chuyển đổi một câu lệnh SQL PIVOT của Oracle thành MySQL tương đương, và các truy vấn phụ khá phức tạp.

Tôi có thể cung cấp Oracle SQL nếu cần.

Được đánh giá cao như mọi khi.

+0

oracle sql thực sự sẽ hữu ích. – Sebas

Trả lời

10

Sau khi một số quan trọng xung quanh:

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

Nếu tôi hiểu bạn một cách chính xác bạn chỉ cần UNION: D

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

Như đã đề cập dưới đây trong bình luận, cột cần phải có cùng tên (bạn có thể sử dụng bí danh cho nó) và giữ nguyên thứ tự.

+1

Miễn là các cột có cùng thứ tự và các kiểu dữ liệu, nếu không nó sẽ bị sặc. – DRapp

+0

Phải, đã chỉnh sửa, thx :) – tkeram

+0

Một liên minh sẽ nối thêm kết quả của mỗi truy vấn vào tập kết quả và với giả định rằng các cột căn chỉnh. Với giải pháp từ @ user1775967, các cột có thể được chọn từ bất kỳ truy vấn nào với giả định rằng các hàng được căn chỉnh. – 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

Khi trả lời câu hỏi, vui lòng thêm một số giải thích về những gì bạn đang làm hoặc lý do giải thích câu hỏi gốc. –