Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mengisih baris pendua dalam jadual pasangan nilai kunci pada berbilang lajur dalam MySQL?

<p>Jadi, saya mempunyai jadual pasangan kunci/nilai berikut, pengguna menyerahkan data melalui borang dan setiap soalan pada borang ditambahkan pada jadual di sini sebagai baris yang berasingan. <kod>Submission_id</code> mengenal pasti setiap penyerahan borang. </p> <pre class="brush:php;toolbar:false;">+----+--------------+----------- ---+--------+ |. id | +----+--------------+--------------+--------+ |. 1 | |. 2 |. 10 | |. 3 |. 10 | |. 15 | |. 5 | |. 15 | |. 7 | |. 8 |. 20 | |. 9 |. 20 | +----+-----------------+--------------+-------+</pra> ; <p>Seperti yang dapat dilihat daripada data di atas, komit dengan id 10 dan 15 mempunyai nilai yang sama (hanya id komit sahaja yang berbeza). Ini pada asasnya kerana pengguna menyerahkan borang yang sama dua kali, jadi ia adalah pendua. </p> <p>Saya cuba mencari cara untuk mengisih jadual ini supaya sebarang penyerahan pendua muncul bersama mengikut tertib. Memandangkan jadual di atas, saya cuba membina pertanyaan yang memberikan saya hasil berikut: </p> <pre class="brush:php;toolbar:false;">+--------------+ |. submission_id | +-------------+ |. 10 | |. 15 | |. 20 | +--------------+</pra> <p>Jadi saya ingin menyemak sama ada komit mempunyai nilai yang sama untuk kekunci <kod>pengilang</kod>, <kod>model</kod> Jika ya, maka mereka mendapat id komit dan mereka diletakkan bersebelahan antara satu sama lain dalam keputusan. Terdapat kunci lain dalam jadual sebenar, tetapi saya hanya mahu memadankan pendua berdasarkan 3 kunci ini (pengilang, model, nama pertama). </p> <p>Saya telah lama memikirkan tentang perkara ini dan cuba mencari beberapa penyelesaian yang mungkin, tetapi tidak menemui apa-apa yang boleh dipercayai. </p>
P粉115840076P粉115840076387 hari yang lalu445

membalas semua(1)saya akan balas

  • P粉659518294

    P粉6595182942023-09-06 00:57:21

    Ini bukan jadual nilai kunci. Selalunya dipanggil jadual/hubungan/skema nilai entiti-atribut.

    Lihat soalannya, jika jadual disusun dalam bentuk biasa biasa pertama dan kedua, ini akan menjadi remeh - hanya menggabungkan nilai, kumpulan mengikut nilai tersebut, dan kira....

    SELECT manufacturer, model, firstname, COUNT(DISTINCT submission_id)
    FROM atable
    GROUP BY  manufacturer, model, firstname
    HAVING COUNT(DISTINCT submission_id)>1;

    atau guna connect....

    SELECT a.manufacturer, a.model, a.firstname
    , a.submission_id, b.submission_id
    FROM atable a
    JOIN atable b
    ON a.manufacturer=b.manufacturer
    AND a.model=b.model
    AND a.firstname=b.firstname
    WHERE a.submission_id<b.submission_id
    ;

    Atau gunakan isihan dan bandingkan baris bersebelahan....

    SELECT *
    FROM
    (
    SELECT @prev.submission_id AS prev_submission_id
    , @prev.manufacturer AS prev_manufacturer
    , @prev.model AS prev_model
    , @prev.firstname AS pref_firstname
    , a.submission_id
    , a.manufacturer
    , a.model
    , set @prev.submission_id:=a.submission_id as currsid
    , set @prev.manufacturer:=a.manufacturer as currman
    , set @prev.model:=a.model as currmodel
    , set @prev.firstname=a.forstname as currname
    FROM atable
    ORDER BY manufacturer, model, firstname, submission_id
    )
    WHERE prev_manufacturer=manufacturer
    AND prev_model=model
    AND prev_firstname=firstname
    AND prev_submission_id<>submission_id;

    Jadi penyelesaiannya adalah dengan menjadikan data anda kelihatan seperti hubungan biasa....

    SELECT ilv.values
    , COUNT(ilv.submission_id)
    , GROUP_CONCAT(ilv.submission_id)
    FROM 
     (SELECT a.submission_id
      , GROUP_CONCAT(CONCAT(a.key, '=',a.value)) AS values
      FROM atable a
      GROUP BY a.submission_id
     ) ilv
    GROUP BY ilv.values
    HAVING COUNT(ilv.submission_id)>1;

    Semoga penyelesaian berdasarkan gabungan dan urutan harus jelas sekarang.

    balas
    0
  • Batalbalas