重複IDだけを削除する

I got 2 tables: job and job_working_time

job: id (Increment, Index, Unique)
job_working_time: job_id(allow multiple), property_working_time

このSQL照会は、複数の値または重複を持つIDを戻します。それは助けますが、それは私の問題を解決しません:

SELECT a.id AS id, count( b.job_id ) AS cnt, b.property_working_time AS value
FROM job a
INNER JOIN job_working_time b ON a.id = b.job_id
GROUP BY b.job_id
HAVING cnt >1

I want to remove duplicates, only for ids with duplicates, e.g: l = leave, r = remove

  • 1~1(l)
  • 1 - 1(r)
  • 1~2(l)
  • 1~3(l)
  • 1 - 1(r)
  • 2 - 1(l)
  • 2 - 1(r)
  • 2 - 2(l)

前もって感謝します

[後で編集] 考慮すべき1つのこと: とにかく、私はIDを削除するには、それのすべての値を削除します。だから、アイデアはそのIDのすべての値を保持することです、後で私は重複なしで追加することができます。そのため、IDと値の両方を取得することは重要ですが、コンテンツは重複しません。 SQLは、上記のすべての(l)値を返す必要があります。リスト。

1

2 答え

あなたの例は、同じ行を望んでいないように見えるので

DISTINCT will work for you

それは完全に異なる行を選択する

SELECT DISTINCT a.id AS id, count( b.job_id ) AS cnt, b.property_working_time AS value
FROM job a
INNER JOIN job_working_time b ON a.id = b.job_id
GROUP BY b.job_id
HAVING cnt >1

編集:

追加された例

http://data.stackexchange.com/stackoverflow/q/119267/

1
追加された
あなたは別の完全なdiffirentの行を失うことはありません、それは "完全な行が同じです"のいずれかの列がdiffirent、それを選択するかどうかをチェックします
追加された 著者 Utku Yıldırım,
@ danielpopa ok、サンプルデータと正確なサンプル結果を示します
追加された 著者 Utku Yıldırım,
@danielpopaはそのサンプルが完全に動作しているので、サンプルデータベースを手伝ってくれます
追加された 著者 Utku Yıldırım,
@danielpopa CREATE は、テンポラリテーブルを作成するためのもので、静的データベースではなく静的データベースを作成するため、 SELECT クエリを実行するだけです。あなたは、データベースのスキーマを私は編集せずに動作するクエリを書くことができます与える場合は、このトピックは、あなたが助けていないので閉じられています。
追加された 著者 Utku Yıldırım,
私たちは同じIDに対して異なる値を失いたくないので、値が重複しているだけです。 SelectはIDのすべての値を返しますが、値は重複しません。
追加された 著者 danielpopa,
あなたはあなたのSQLを試してみましたか?私はあなたの興味のために無礼になりたくはありませんが、DISTINCTは私の場合は助けになりません。
追加された 著者 danielpopa,
リストから例を確認してください。 Lでマークされた行は、dbにとどまるはずです。
追加された 著者 danielpopa,
申し訳ありませんが、私はそれが私のために許可されていないので、オプションではないことを言及していませんでした。このトピックが閉じられたとしましょう。助けてくれてありがとう!
追加された 著者 danielpopa,

最初/簡単なクエリ:

SELECT id, field, count(*) c from ... group by  field having c >1

2番目のクエリは、削除するIDを取得するために修正されました:

SELECT  instr(s,mid(s,',')+1) from (
SELECT group_concat(id) s, count(*) c from ... group by  field having c >1)z

そして最後に:

Delete FROM ... WHERE id in ( ...)

醜く見えるが速い(中間機能のパフォーマンスは(...)にないよりも速い)。

0
追加された
同じidの2つの異なる値の場合、解は最初の値を失います(詳細は後で確認してください)
追加された 著者 danielpopa,