Laden...

SQL Statement für alle Einträge ohne jene aus 2. Tabelle

Erstellt von baer999 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.376 Views
B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 9 Jahren
SQL Statement für alle Einträge ohne jene aus 2. Tabelle

mySQL

Hallo, ich habe zwei Tabellen, die ich miteinander per SQL verknüpfe (Triggers und Triggers_Done).
Triggers ist die Kopftabelle mit ID verknüpft mit Triggers_Done (Trigger_ID).

Ich möchte nun alle Zeilen der Tabelle Triggers zurückgeliefert bekommen,
die KEINEN Eintrag mit einem Usernamen X in der Tabelle Triggers_Done haben.

Habe bisher das hier zusammengebastelt:

select t.*, d.* from triggers as t
left join
trigger_done d on t.OID = d.Trigger_ID
where d.Username = "123" AND d.Trigger_ID is null

Wenn ich nicht nafch d.Username eingrenze liefert mir das Statement tatsächlich alle Zeilen zurück, die sich nicht in Triggers_Done befinden - aber wie kann ich da zusätzlich nach dem Usernamen eingrenzen, da stehe ich irgendwie im Wald...

Danke !!!

S
322 Beiträge seit 2007
vor 9 Jahren

Hallo,

hast Du es mal mit einer Unterabfrage probiert?

sowas?


select * from triggers where OID not in (select Trigger_ID from trigger_done WHERE Username = "123")

T
67 Beiträge seit 2010
vor 9 Jahren

Meiner Meinung nach viel zu kompliziert gedacht. Bei nur 2 Tabellen musst Du keine "wilden" JOIN Konstrukte bauen. Das geht auch deutlich einfacher.
Hier ein Beispiel wie dein geschildertes Problem umgesetzt werden könnte.


SELECT *
FROM Triggers AS t, Triggers_Done AS d
WHERE t.OID = d.Trigger_ID AND NOT d.Username = '123'

Das würde dir aus beiden Tabellen alle verknüpften Datensätze zurück liefern deren Username in Triggers_Done nicht 123 ist.

W
955 Beiträge seit 2010
vor 9 Jahren

Hallo,

@Talon:


SELECT *
FROM Triggers AS t, Triggers_Done AS d
WHERE t.OID = d.Trigger_ID AND NOT d.Username = '123'

er schrieb aber

Ich möchte nun alle Zeilen der Tabelle Triggers zurückgeliefert bekommen,
die KEINEN Eintrag mit einem Usernamen X in der Tabelle Triggers_Done haben.

Also eher


SELECT DISTINCT t.*
FROM Triggers AS t, Triggers_Done AS d
WHERE t.OID = d.Trigger_ID AND NOT d.Username = '123'

... oder er hat sich ungenau ausgedrückt.

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 9 Jahren

Danke für eure Hilfe!

Der Schnipsel von steffen_dec war genau das was ich gesucht habe!

Er liefert mir alle Trigger für dieser Username zurück, die ich noch abarbeiten muss (und dann einen Satz in Triggers_Done schreibe).

Mir geht es also um Trigger, die ich auf versch. Clients abarbeiten will, dazu muss ich wissen, welche auf Client X noch offen sind 😉

Merci beaucoup !!!