Tôi đang cố gắng chọn bản ghi trùng lặp dựa trên một kết hợp của ba cột. Danh sách các bộ ba có thể rất dài (1000), vì vậy tôi muốn làm cho nó ngắn gọn.MySql IN mệnh đề, cố gắng để phù hợp với IN danh sách các bộ dữ liệu
Khi tôi có một danh sách các kích thước 10 (được gọi bản sao) nó chỉ phù hợp 2 (những người dường như ngẫu nhiên) và bỏ lỡ khác 8. Tôi dự kiến 10 hồ sơ để trở lại, nhưng chỉ thấy 2.
Tôi đã thu hẹp nó xuống vấn đề này:
Điều này trả về một bản ghi. Mong 2:
select *
from ali
where (accountOid, dt, x) in
(
(64, '2014-03-01', 10000.0),
(64, '2014-04-23', -122.91)
)
Trả hai kỷ lục, như mong đợi:
select *
from ali
where (accountOid, dt, x) in ((64, '2014-03-01', 10000.0))
or (accountOid, dt, x) in ((64, '2014-04-23', -122.91))
Bất cứ ý tưởng tại sao truy vấn đầu tiên chỉ trả lại một bản ghi?
tôi đã không thể tái tạo các vấn đề trên máy tính của tôi (MySQL 5.6 .14). Bạn có thể làm cho một fiddle? – Vatev
Bạn có thể chỉnh sửa câu hỏi của mình và mô tả các loại cột dữ liệu ('SHOW CREATE TABLE ali') không? Nếu bạn đang sử dụng 'FLOAT' hoặc' DOUBLE' cho cột 'x', nó có thể gây ra sự so sánh bình đẳng thất bại vì giá trị chính xác được làm tròn theo cách không mong muốn. Ngoài ra, vui lòng chỉ định chính xác phiên bản MySQL nào bạn sử dụng. –
Bạn có thể đăng mã bạn đang sử dụng không. Tôi đã sao chép nó vào một cái bàn và lúc đầu nó trông giống như một giá trị toán hạng, nhưng đó là lỗi của tôi khi thiếu một bộ ngoặc đơn. Giống như Vatev tôi đã không thể tái sản xuất vấn đề – DanceSC