MySQL Datenbank-Abfrage: Datensätze anzeigen, die nicht mit der Abfrage angesprochen werden

... komplette Frage anzeigen

2 Antworten

Natürlich kann man eine Abfrage auch umdrehen. Da gibt es verschiedene Möglichkeiten, die letztlich davon abhängen, wie komplex die Abfrage ist und welchen Schlüssel die Tabellen haben. Das einfache umdrehen sieht so aus:

  1. where farbe = 'grün'

  2. where farbe <> 'grün'

  3. where (farbe <> 'grün or farbe is null)

Wenn 1. die Original Abfrage ist, bringt 2. alle Sätze, die bei 1. nicht ausgewählt wurden. Ist bei farbe auch null zugelassen, müssen diese Sätze extra erwähnt werden, da diese Sätze weder bei 'grün' noch bei ungleich 'grün' selektiert werden. Das würde mit 3 dann gehen.

Die andere Möglichkeit wäre mit einem subselect:

select * from tabelle where id not in (select id from tabelle where ....)

Der subselect enthält die Original-Abfrage und selektiert damit den Satzschlüssel, die eigentliche Abfrage bringt dann alle Sätze, die im Ergebnis vom subselect nicht enthalten sind).

Am besten wäre aber, Du würdest für die Kommentare eine referentielle Integrität (Fremdschlüssel) zu den News einrichten. Wenn Du dann eine News löscht, werden die Kommentare mitgelöscht. Bei der Art des Fremdschlüssels musst Du cascade angeben. Bei restrict wäre das Löschen nicht möglich, solange noch Kommentare vorhanden sind. Bei senull würde beim Kommentar die id auf Null gesetzt, wenn es keinen dazugehörigen News mehr gibt.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?