2016-06-22 4 views
0

Ich versuche, eine einzelne Abfrage zu schreiben, die aus einer Tabelle alle Datensätze extrahiert, die doppelte Einträge mit unterschiedlichen Werten sind. Der Zweck besteht darin, einem Benutzer zu ermöglichen, zu markieren, welcher Datensatz in einem Satz die primäre Beobachtung ist.Wie Sie Datensätze mit doppelten Indizes in der Datenbank auflisten

Tabellenfelder:

idTable (Index), idPlant, idParameter, Value (tinytext), IsPrimary (Yes/No, default No) 

Ich möchte in der Lage sein, nur die Datensätze anzuzeigen, die identisch idPlant haben und idParameter, wo der Wert unterschiedlich ist, aber ich möchte die tatsächlichen Datensätze aufzulisten nicht die Anzahl der Wiederholungen (die einfach zu erledigen). Der Benutzer kann dann für jede (idPlant and idParameter) Gruppe auswählen, welches idTable die primären Daten sind, um die Tabelle zu aktualisieren und IsPrimary auf 'Yes' setzen.

Ich bin mir sicher, dass dies möglich sein muss, aber der einzige Weg, wie ich es sehen kann, ist ein mehrstufiger Prozess der MySQL- und PHP-Verarbeitung.

Ich konnte nicht die Antworten auf die ähnliche Frage erhalten, um zu arbeiten, denke ich, weil ich auf zwei Spalten gruppiere.

Ich habe versucht, die SQL-Geige zu verwenden, aber das konnte auch nicht funktionieren. Also habe ich die Create SQL-Anweisung und einige Beispieldaten

Ich versuche, eine Abfrage erstellen, die den gesamten Datensatz für IDPhenotype = 3,4,5 anzeigen würde (weil einer dieser nicht übereinstimmt) und 7, 8 (wieder, weil man nicht übereinstimmt), aber ignoriert idPhenotype 10,11 weil die PhenotypeValue identisch ist

Tabelle SQL

CREATE TABLE IF NOT EXISTS `phenotype` 
( `idPhenotype` int(10) unsigned NOT NULL AUTO_INCREMENT 
, `idPhenotypeDef` int(11) DEFAULT NULL 
, `idPlant` mediumint(9) NOT NULL, `PhenotypeParameter` tinytext 
, `PhenotypeValue` text 
, `PhenotypeDescribedBy` tinytext 
, `NewestData` enum('Yes','No') NOT NULL DEFAULT 'Yes' 
, PRIMARY KEY (`idPhenotype`) 
, UNIQUE KEY `idPhenotype_UNIQUE` (`idPhenotype`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=509165 ; 

Daten SQL

INSERT INTO `phenotype` (`idPhenotype`, `idPhenotypeDef`, `idPlant` 
, `PhenotypeParameter`, `PhenotypeValue`, `PhenotypeDescribedBy` 
, `NewestData`) VALUES 
(1, 1, 1, 'Front', 'Green', 'Historic Data', 'Yes') 
,(2, 1, 2, 'Front', 'Green', 'Historic Data', 'Yes') 
,(3, 1, 3, 'Front', 'Green', 'Historic Data', 'Yes') 
,(4, 1, 3, 'Front', 'Dark Green', 'Historic Data', 'Yes') 
,(5, 1, 3, 'Front', 'Green', 'Historic Data', 'Yes') 
,(6, 1, 19, 'Front', 'Green', 'Historic Data', 'Yes') 
,(7, 1, 20, 'Front', 'Green', 'Historic Data', 'Yes') 
,(8, 1, 20, 'Front', 'Brown', 'Historic Data', 'Yes') 
,(9, 1, 205, 'Front', 'Green', 'Historic Data', 'Yes') 
,(10, 2, 1, 'Back', 'Green', 'Historic Data', 'Yes') 
,(11, 2, 1, 'Back', 'Green', 'Historic Data', 'Yes') 
,(12, 2, 12, 'Back', 'Green', 'Historic Data', 'Yes') 
,(13, 2, 13, 'Back', 'Green', 'Historic Data', 'Yes') 
,(14, 2, 14, 'Back', 'Green', 'Historic Data', 'Yes') 
,(15, 2, 15, 'Back', 'Green', 'Historic Data', 'Yes'); 

http://sqlfiddle.com/#!9/346b4

+0

wäre es möglich, wenn Sie einen [SQLFiddle] (http://sqlfiddle.com) – psycotik

+0

Mögliche machen könnte Duplikat von [Doppelte Datensätze in MySQL finden] (http://stackoverflow.com/questions/854128/find-duplicate-records-in-mysql) –

+0

'Tabellenfelder:' ist eine Art EAV-Tabelle? WIE ist seine Beziehung zu der 'Tabelle SQL'? Warum ist es relevant für die Frage? BTW: Ich denke du willst die Duplikate * even * erkennen, wenn der Wert gleich ist. – wildplasser

Antwort

1

Ich glaube, Sie brauchen, "haben" Konstruktion:

Try this:

SELECT * FROM phenotype 
WHERE CONCAT(idPlant,'-',PhenotypeParameter) IN (
    SELECT CONCAT(idPlant,'-',PhenotypeParameter) 
    FROM phenotype 
    GROUP BY idPlant, PhenotypeParameter 
    HAVING COUNT(*) > 1 
) 
+0

Ich denke, das nähert sich, was ich brauche, aber es listet nur eine Zeile für jeden Satz auf. Obwohl ich nicht sicher bin, warum als idPlant von 3 und ein Parameter von 'Front' 3 Datensätze auflisten sollte. – rsphorler

+0

Nur getestet mit der Tabelle und Daten, die Sie zur Verfügung gestellt ... die Abfrage gibt 7 Zeilen und 3 von ihnen sind "idPlant = 3" und "PhenotypeParameter = 'Front'" –

+0

Interessant, habe ich es auf der tatsächlichen Tabelle versucht es fehlgeschlagen, so ich erstellt die Dummy-Tabelle oben und es hat funktioniert! Also, danke, Sergio sieht aus, als müsste das jetzt funktionieren, um herauszufinden, warum es auf dem echten Tisch nicht so ist. – rsphorler

Verwandte Themen