Tôi có hai bảng như sau:giới hạn, sự lựa chọn của UNION lặp lại kiểm tra các cột
parameters1
+------+-----+
| cod | des |
+------+-----+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
parameters2
+------+-----+
| cod | des |
+------+-----+
| 1 | mmm |
Tôi thường JOIN tập kết quả của hai bảng này với UNION theo cách này:
SELECT cod, des
FROM parameters1
UNION
SELECT cod, des
FROM parameters2
và tôi có được điều này tập kết quả:
+------+-----+
| cod | des |
+------+-----+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 1 | mmm |
Tôi muốn giới hạn kiểm tra chỉ đến cột cod
trùng lặp UNION, vì vậy tôi muốn tránh điều đó là 1 cá tuyết được nhân đôi trong tập kết quả (khi có một kỷ lục với tên khác và cá tuyết giống nhau), tôi muốn lấy tên từ bảng đầu tiên (parameters1):
+------+-----+
| cod | des |
+------+-----+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
CẬP NHẬT Nếu tôi loại bỏ các kỷ lục 1
từ parameters1 bảng (DELETE FROM parameters1 WHERE cod = 1
) i nên có được điều này tập kết quả:
+------+-----+
| cod | des |
+------+-----+
| 1 | mmm | ---> FROM parameters2
| 2 | bbb |
| 3 | ccc |
Có thể hạn chế việc kiểm tra trùng lặp của một UNION để chỉ có một lĩnh vực hoặc một số lĩnh vực? Làm sao ?
Giải pháp sẽ hoạt động trên môi trường đa dữ liệu (MSSQL, PostgreSQL, MySQL).
thể trùng lặp của [SQL Server Liên minh riêng biệt cho một cột] (http://stackoverflow.com/questions/7338884/sql-server-distinct-union-for-one-column) – ruakh
Xin giải thích logic tại sao hàng '(1, 'aaa')' được chọn trên hàng '(1, 'mmm')' ví dụ bởi vì '' aaa '<' mmm'', có lẽ? Câu trả lời được chấp nhận dường như chọn một hàng tùy ý. – onedaywhen
Đó là logic mà tôi đã xác định bởi vì một bảng có quyền ưu tiên ... – aleroot