Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Ẩn kết quả trùng lặp trong truy vấn MySQL

Luôn luôn có một cách. Câu hỏi đặt ra là "Chúng ta có nên làm điều này không". Lưu ý bằng cách làm này bạn ẩn dữ liệu thương hiệu. Nếu dữ liệu được sắp xếp, sắp xếp lại, bộ sắp xếp sẽ mất khả năng biết thương hiệu nào dành cho hàng nào. Nếu đây chỉ là một báo cáo in không được sử dụng hoặc mong đợi ở dạng PDF mà người dùng không thể thao tác dữ liệu thì không sao .. Nhưng nếu điều này là như vậy người dùng có thể kết xuất để excel và thao tác sau ... tốt hơn nên có tất cả dữ liệu.

Cá nhân tôi thấy cách hiển thị thông tin này khó chịu trên dữ liệu điện tử, nhưng không sao trên các biểu mẫu in hoặc báo cáo tĩnh. Lý do:trên điện tử, tôi có thể nhập vào sắp xếp excel và chơi với dữ liệu; nhưng nếu các cột bị "thiếu" dữ liệu dư thừa thì thao tác điện tử trở nên có vấn đề.

SQLfiddle làm việc

CREATE Table foo (
 brand varchar(20),
 description varchar(20),
 prodcode varchar(20));


Insert into foo values ('Brand1', 'Description1', 'Product1'),
('Brand1', 'Description2', 'Product2'),
('Brand1', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand1', 'Description3', 'Product3');

QUERY:

SELECT case [email protected] <> f.brand then @Var :=brand end as Brand
     , f.description
     , f.prodcode
FROM (SELECT * FROM foo ORDER BY brand, description, prodcode) f
CROSS JOIN  (SELECT @var := '') b

KẾT QUẢ:

Brand   description     prodcode
Brand1  Description1    Product1
(null)  Description2    Product2
(null)  Description3    Product3
(null)  Description3    Product4
Brand2  Description3    Product4
(null)  Description3    Product4

Tại sao điều này hoạt động:

Điều kỳ diệu xảy ra trong kết hợp chéo và đánh giá trường hợp.

Có 1 bàn. Chúng tôi đang phân loại hồ sơ trước khi tham gia. Chúng tôi đang tạo một biến người dùng có tên là @var và đặt nó thành '' trên bản ghi đầu tiên trong table foo. Sau đó, chúng tôi gán @var cho thương hiệu của bản ghi đầu tiên. Khi chữ thập SQL tham gia vào @var được đệ trình thứ hai bây giờ là thương hiệu của bản ghi đầu tiên. Nếu các thương hiệu khớp nhau, không có bản ghi nào được hiển thị, nếu các thương hiệu không khớp nhau, chúng tôi thay đổi giá trị của @var và hiển thị giá trị mới.

Rủi ro:

  • chúng tôi nếu các lần tham gia bảng khác xảy ra hoặc thứ tự không như mong muốn trong bảng, trước tiên chúng tôi cần thực hiện một truy vấn con trên "foo" để đặt hàng theo thương hiệu
  • việc áp dụng bất kỳ đơn đặt hàng nào liên quan đến brand1 giờ đây trở nên vô giá trị
  • Nó không thể tái sử dụng được. Một mô-đun khác có thể muốn tận dụng dữ liệu (chế độ xem) không còn có thể thực hiện được nữa vì thương hiệu đã bị ẩn trên một số bản ghi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều khoản LIMIT thay thế trong JPQL là gì?

  2. Tìm và thay thế văn bản trong toàn bộ bảng bằng truy vấn MySQL

  3. Lỗi liên kết truyền thông - gói cuối cùng nhận được thành công từ máy chủ là

  4. Tôi có thể nối nhiều hàng MySQL vào một trường không?

  5. Có cách nào trong SQL (MySQL) để thực hiện một LỆNH LỆNH theo vòng tròn trên một trường cụ thể không?