MudGuard: mysql Abfrage Doppelte Abgleich mit Ausschluss

Beitrag lesen

Hi,

id|a    |target|c      |d     |status
1 |rot  |blau  |gelb   |lemon |1     // fällt weg, weil status = 1
2 |bmw  |merc  |audi   |tesla |0
3 |eiche|ahorn |buche  |bambus|1     // fällt weg, weil status = 1
4 |stahl|gold  |silber |platin|1     // fällt weg, weil status = 1
5 |rubin|saphir|smaragd|opal  |0     // fällt weg, weil target gleich wie anderer Eintrag mit status = 1
6 |rubin|ahorn2|rubin  |rubin |0
7 |rubin|gold  |rubin  |rubin |0     // fällt weg, weil target gleich wie anderer Eintrag mit status = 1

Was ist der einfachste Weg alle anzuzeigen deren status != 1 ist aber auch nicht die, deren target-Eintrag denen vom status 1 entspricht?

also erstmal die targets für Status = 1 ermitteln:

SELECT DISTINCT target FROM tabelle WHERE status = 1

Und jetzt die, die Status != 1 haben, und ein target, das nicht in der Ergebnismenge des 1. Statements ist:

SELECT * FROM tabelle WHERE status != 1 AND target NOT IN (
    SELECT DISTINCT target FROM tabelle WHERE status = 1
)

cu,
Andreas a/k/a MudGuard