Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Sembunyikan hasil duplikat dalam kueri MySQL

Selalu ada jalan. Pertanyaannya adalah "Haruskah kita melakukan ini". Catatan dengan melakukan ini Anda menyembunyikan data merek. Jika data diurutkan ulang, diurutkan, penyortir kehilangan kemampuan untuk mengetahui merek mana untuk baris apa. Jika ini hanya laporan tercetak yang tidak digunakan atau diharapkan menjadi PDF di mana pengguna tidak dapat memanipulasi data maka ok.. Tetapi jika demikian, pengguna dapat membuang ke excel dan memanipulasi nanti... lebih baik memiliki semua data.

Saya pribadi menemukan tampilan informasi ini tidak menyenangkan pada data elektronik, tetapi ok pada formulir cetak atau laporan statis. Alasannya:di elektronik saya bisa mengimpor ke excel sort dan bermain dengan data; tetapi jika kolom "hilang" data yang berlebihan maka manipulasi elektronik menjadi masalah.

SQLfiddle yang berfungsi

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');

PERTANYAAN:

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

HASIL:

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

Mengapa ini berhasil:

Keajaiban terjadi pada gabungan silang dan pada evaluasi kasus.

Ada 1 meja. Kami sedang menyortir catatan sebelum kami bergabung. Kami membuat variabel pengguna bernama @var dan menyetelnya ke '' pada catatan pertama di dalam tabel foo. Kemudian kami menetapkan @var ke merek rekaman pertama. Ketika salib SQL bergabung dengan @var ke-2 yang diajukan sekarang menjadi merek dari catatan pertama. Jika merek cocok, tidak ada catatan yang ditampilkan, jika merek tidak cocok, kami mengubah nilai @var dan menampilkan nilai baru.

Risiko:

  • kita jika terjadi penggabungan tabel lain, atau urutan tabel tidak sesuai keinginan, kita perlu melakukan subquery terlebih dahulu pada "foo" untuk memesan berdasarkan merek
  • menerapkan perintah apa pun dengan ini yang melibatkan brand1 sekarang tidak ada gunanya
  • Ini tidak dapat digunakan kembali. Modul lain yang mungkin ingin memanfaatkan data (tampilan) tidak lagi dapat melakukannya karena merek telah disembunyikan di beberapa catatan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nilai daftar sisipkan massal dengan SQLAlchemy Core

  2. Lanjutkan kueri SQL bahkan pada kesalahan di meja kerja MySQL

  3. Bagaimana cara mengubah waktu dalam detik ke format HH:MM:SS di MySQL?

  4. Bagaimana cara mendapatkan nama kolom dari tabel MySQL yang diberikan?

  5. Pencegahan yang baik dari injeksi MYSQL?