2010-10-24 34 views
12

Hãy nói rằng tôi muốn thực hiện truy vấn này:UNION ALL và LIMIT trong MySQL

(SELECT a FROM t1 WHERE a=10 AND B=1) 
UNION ALL 
(SELECT a FROM t2 WHERE a=11 AND B=2) 
UNION ALL 
(SELECT a FROM t3 WHERE a=12 AND B=3) 
ORDER BY a LIMIT 1000; 

là MySQL đủ thông minh để bỏ qua "t3" nếu 550 kết quả có sẵn trong "t1" và 450 trong "t2"?

Tôi đang xem tài liệu MySQL (http://dev.mysql.com/doc/refman/5.1/en/union.html) nhưng dường như không thể tìm thấy câu trả lời.

Trả lời

5

Như quy định tại UNION Cú pháp mô tả (http://dev.mysql.com/doc/refman/5.1/en/union.html):

Hành vi mặc định cho UNION là hàng trùng lặp được xóa khỏi kết quả . Từ khóa DISTINCT tùy chọn không có tác dụng khác với mặc định vì nó cũng chỉ định xóa hàng trùng lặp. Với tùy chọn TẤT CẢ từ khóa, hàng trùng lặp xóa không xảy ra và kết quả bao gồm tất cả các hàng phù hợp từ tất cả câu lệnh SELECT.

Tôi cho rằng đó là câu trả lời cho câu hỏi của bạn.

+0

Got nó, cảm ơn vì câu trả lời của bạn – Fretre

+0

Trong kết quả thiết lập, dữ liệu từ t1 sẽ luôn ở trước t2 và t3 và t2 trước t3? Tôi cần phải đọc dữ liệu được sắp xếp theo "B ASC" và tự hỏi liệu tôi có thể bỏ qua "lệnh của B ASC" sau các công đoàn hay không. – Fretre

+0

Được chỉ định trong thủ công, "UNION theo mặc định tạo ra một tập hợp các hàng không theo thứ tự", vì vậy, theo như tôi hiểu, không có sự đảm bảo nào. – Kel

0

Nó hoạt động cho tôi Tôi đang sử dụng MySQL.

nhưng chắc chắn rằng số lượng giới hạn luôn luôn là như nhau cho tất cả

ở chỗ dụ nó được bạn 3 kết quả từ mỗi bảng

(SELECT a FROM t1 WHERE a=10 AND B=1 LIMIT 9) 
UNION ALL 
(SELECT a FROM t2 WHERE a=11 AND B=2 LIMIT 9) 
UNION ALL 
(SELECT a FROM t3 WHERE a=12 AND B=3 LIMIT 9) 
+0

Điều này không đúng vì nó sẽ trả lại tối đa 27 hàng. – brooNo