2017-07-20 3 views
0

Das sind meine Aufzeichnungen.Wie lösche Zeile mit nur einer Spalte in subl?

Ich mag nur Datensätze löschen mit

PACK = ‚1` s‘

aber, wenn die Zeile hat keine Duplikate, selbst wenn sein PACK ist gleich zu‚1 ' S 'es wird bleiben.

Das einzige, was ich tun kann, ist, die Datensätze zu überprüfen, die Duplikate haben. Und Datensätze mit PACK = 1 zu löschen.

SELECT Name, COUNT(*) as duplicates FROM table1 Group by Name having COUNT(*) >1 Order by duplicates

HINWEIS: Ich ersetze einfach mit SELECT

DELETE

SELECT * FROM table1 WHERE PACK = '1's'

Wenn Sie Fragen haben, bitte einfach fragen. Vielen Dank!

+2

welche Datenbank ?? – Rams

+3

Die meisten Leute hier wollen formatierten Text, keine Bilder oder Links zu Bildern. – jarlh

+0

was ist deine Anstrengung? –

Antwort

0

Sie möchten also alle 1`S Datensätze löschen, für die existiert ein Datensatz mit dem gleichen Namen und Kategorie und ein anderes Paket. Sie können genau dies in SQL:

delete from table1 
where pack = '1`S' 
and exists 
(
    select * 
    from table1 other 
    where other.name  = table1.name 
    and other.category = table1.category 
    and other.pack  <> table1.pack 
); 

Dies ist Standard-SQL und sollte in etwa jedem DBMS funktionieren. Da MySQL die berüchtigte Ausnahme ist, da sie es verbieten, die aktualisierte Tabelle in einer Unterabfrage erneut direkt zu verwenden. Hier müssten Sie from table1 other durch from (select * from table1) other ersetzen.

0

Vielleicht PL/SQL können Sie führen:

Delete from table1 
    where id not in (select min(id) 
         from table1 
         where pack = '1`S' 
         group by name 
         having count(*) = 1 
        ) 
      and pack = '1`S'; 
+0

es wäre das gleiche für t-sql zu – dbajtr

+0

Dies ist nicht PL/SQL. PL/SQL ist die in das DBMS integrierte Programmiersprache von Oracle. Was Sie zeigen, ist SQL. –

+0

"PL/SQL ist eine Kombination von SQL zusammen mit den prozeduralen Funktionen von Programmiersprachen." Ich wollte betonen, dies ist eine Syntax für Oracle DBMS. –

0

INNER JOIN der Tabelle auf sich selbst mit der Einschränkung, dass das ID-Feld größer als das ID-Feld durch die Verbindung gefunden ist. Wenn keine Duplikate vorhanden sind, werden keine Ergebnisse angezeigt. Wenn Duplikate vorhanden sind, wird das zuletzt hinzugefügte gelöscht.

Verwandte Themen