2012-02-24 16 views
0

ごとに重複して下さい:私は探しています私はAufgabeにPlanungから親子関係を形成する2つのDB tabels持つ親ID

CREATE TABLE `aufgabe` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `planung_id` bigint(20) DEFAULT NULL, -- foreign key to Planung.id 
    `Nummer` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    -- lots of ohter columns 
) ENGINE=InnoDB 

Planung:

CREATE TABLE `planung` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `Bezeichnung` varchar(255) DEFAULT NULL, 
    -- lots of ohter columns 
    PRIMARY KEY (`id`), 
) ENGINE=InnoDB 

Aufgabeを私にPlanung.idとAufgabe.IDを与えた質問に対してはPlanungごとにすべてのNummerが重複しています。言い換えれば:Planung Aufgabeすべてについて.Nummerは一意でなければなりません、私はwhehterを確認したいのですが、これは実際に私のDBのケースです(私はそうではないことを知っています)。

+3

テーブル 'aufgabe'に 'planung_id、nummer'というユニークなインデックスを使用することを検討してください。 (あなたがコースをきれいにした後)。 – dgw

答えて

1
SELECT planung_id, GROUP_CONCAT(id) AS aufgabe_id, Nummer, COUNT(1) as num_duplicates 
FROM aufgabe 
GROUP BY planung_id, Nummer 
HAVING COUNT(1) > 1 

このクエリは、Nummerを重複しているし、それらを好き表示すべてplanung_idいます:

Planung 1のために、意味
planung_id aufgabe_id Nummer num_duplicates 
1   2,5,8  1  3 

は、Nummer 1と3 Aufgabeが存在し、彼らは2であります、5,8

編集:あなたはトンを実行したら :恥知らず@dgwのコメントから盗まれましたすべての重複を修正しました。

ALTER TABLE aufgabe 
    ADD CONSTRAINT UNIQUE uq_planung_id_and_nummer (planung_id, Nummer) 
+0

+1とGROUP_CONCATを追加しました。 – dgw

+0

ありがとう、完璧に動作します。 – BetaRide

1
select p.id, a.id, a.Nummer from planung p 
inner join aufgabe a on a.planung_id = p.id 
group by p.id, a.id, a.Nummer having count(*) > 1 
+0

これは、a.idがグループの一部であるため動作しません。 – dgw

+0

私は空の結果を得ます。 – BetaRide

+0

ええ、私が喫煙していたものは分からず、selectとgroupからa.idを除外して、他の回答の1つを得ました。 – mindandmedia

0

これはあなたの親回以上であることplanungからすべての要素を提供します:データベースはこの制約を維持することを確実にするためにaufgabe {planung_id, Nummer}に一意のインデックスを追加します。

SELECT planung_id,nummer,COUNT(*) 
    FROM aufgabe 
GROUP BY 1,2 HAVING COUNT(*)>1 ; 
0

これはあなたに複数のNummer値持つすべてのplanung_id与える:あなたが強制する必要がある場合は

SELECT * 
FROM aufgabe 
WHERE 
    planung_id IN (
     <query above> 
    ) 

:あなたもaufgabe.idが必要な場合は

SELECT planung_id 
FROM aufgabe 
GROUP BY planung_id 
HAVING COUNT(DISTINCT Nummer) > 1 

を、あなたはこれを行うことができますいつも、{planung_id, Nummer}にキーを追加することを検討してください(@dgwはすでに提案しています)。

関連する問題