2017-02-25 4 views
0

Ich habe eine Tabelle mit finden:sql uniq Reihe ausschließen verschiedene doppelte Zeile

 
id field_id todelete 
1 x001  0 
2 x001  1 
3 x001  0 
4 x002  1 
5 x003  0 
6 x003  1 
7 x004  0 
8 x005  0 

Von diesem Ich brauche id 4, es hat todelete = 1 und seine einzigartige in field_id. Meine aktuelle Lösung:

array = SELECT field_id WHERE todelete = 1 

und von diesem Array

SELECT field_id WHERE field_id = array[x] HAVING COUNT(field_id) = 1 

scheint die falsche Lösung. Kann ich das nur in SQL haben? Danke

+0

Ich glaube, das Ihnen helfen kann http://stackoverflow.com/q/8829975/6495084 – GedAWizardofEarthSea

+0

nein, ich denke es sollte wie aussehen field_id wo todelete = 1 h aving count (field_id) = 1 –

+0

Welches DBMS benutzen Sie? Postgres? Orakel? DB2? Feuervogel? –

Antwort

1

Sie waren auf dem guten Weg. Es gibt sicherlich auch andere Lösungen, aber das sind 2, die, wie Sie arbeiten möchten:

SQL Fiddle

MySQL 5.6 Schema-Setup:

CREATE TABLE Table1 
    (`id` int, `field_id` varchar(4), `todelete` int) 
; 

INSERT INTO Table1 
    (`id`, `field_id`, `todelete`) 
VALUES 
    (1, 'x001', 0), 
    (2, 'x001', 1), 
    (3, 'x001', 0), 
    (4, 'x002', 1), 
    (5, 'x003', 0), 
    (6, 'x003', 1), 
    (7, 'x004', 0), 
    (8, 'x005', 0) 
; 

Abfrage 1:

SELECT id 
FROM Table1 
WHERE field_id in 
    (SELECT field_id 
    FROM Table1 
    WHERE todelete = 1) 
GROUP BY field_id 
HAVING count(*)=1 

Results:

| id | 
|----| 
| 4 | 

Abfrage 2:

SELECT id 
FROM Table1 
WHERE todelete = 1 
AND field_id in 
    (SELECT field_id 
    FROM Table1 
    GROUP BY field_id 
    HAVING count(*)=1) 

Results:

| id | 
|----| 
| 4 | 
+0

Zweites Beispiel ist genau das, was ich brauche. Vielen Dank –