[MySQL] Überprüfe ob Wert aus Tabelle A in Tabelle B steht

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo

ich habe eine Tabelle A mit Einträgen:

ID - Wort
1 -Test1
2 -Test2
3 -Test3
4 -Test4
5 -Test5

und eine Tabelle B mit Einträgen:
1 -Test3


Nun möchte ich jede Eintrag aus Tabelle A mit Tabelle B vergleichen. Steht dieser in Tabelle B so soll er nicht ausgegeben werden.

Ich weiß das es mit nem LEFT Join geht, nur weiß ich noch nicht so ganz wie!
Kann mir da bitte jemand helfen?

Mein Versuch:
PHP:
SELECT * from logs LEFT JOIN logs_blacklist_host ON (logs.host = logs_blacklist_host.host) WHERE logs_blacklist_host.host !='192.168.16.38'

MFG
Daniel
 
Zuletzt bearbeitet:
Anderes Gleiches Problem, andere Spalten und gleiche Anforderung.

Die Einträge in Tabelle B sollen von Tabelle A nicht mehr angezeigt werden.

Tabelle A:
ID - Wert - Value
1 - 1 - 1
2 - 1 - 1
3 - 2 - 1

Tabelle B:
ID - Wert
1 - 1

Wenn ich nun sein Select auf Tabelle A mache, soll er die Einträge die in Tabelle B.Wert mit Tabelle A.Wert übereinstimmen nicht zurückgeben!

Wer kann mir da eine SQL-Abfrage liefern?
 
mehrere Alternativen möglich:

1. Möglichkeit:

SELECT spalten
FROM tabelleA
WHERE Wert
NOT IN
( SELECT wert
FOM tabelleB ) ;


2. Möglichkeit:

SELECT spalten
FROM tabelleA A
WHERE NOT EXISTS
( select *
from tabelleB B
where A.wert = B.wert ) ;

3. Möglichkeit:

SELECT spalten
FROM tabelleA A
LEFT JOIN tabelleB B
ON a.wert = b.wert
WHERE b.wert IS NULL ;
 
Danke, aber die Situation hat sich nun geändert:

Tabelle A
ID - Host - MSG
1 - 50 - Test1
1 - 50 - Test1
1 - 39 - Test1

Tabelle B
ID - Host - MSG
1 - 50 - Test1


Nun möchte ich das der Eintrag mit der Host-Nummer 39 dennoch angezeigt wird, also nur das die 50er ausgeblendet werden...

MFG
Papenburger
 
dann nimm meinen post von über Dir und ersetzte den Text "wert" durch "host".


Es wundert mich allerdings, dass in Deiner TabelleA dreimal die ID 1 stehen kann
 
dann nimm meinen post von über Dir und ersetzte den Text "wert" durch "host".


Es wundert mich allerdings, dass in Deiner TabelleA dreimal die ID 1 stehen kann

Das mit der ID ist ein Versehen!

Zum Problem:
Bei der Abfrage wird nur nach eines gefiltert. Es soll die Message von der 50 Ausgeblendet werden, aber die Message von der 39 nicht!

Dies alleine nach dem Host zu sortieren geht nicht da dem Host teilweise andere Messages zugeordnet sind...
 
Rückfrage:
wenn in der Tabelle A Eintragungen wären

ID...Host...msg
97...40.....TEXT1
98...50.....TEXT1
99...50.....TEXT2

und in Tabelle B
ID...Host...msg
1....50.....TEXT1

welche Zeilen sollen dann in der Ergebnistabelle erscheinen ?
 
Rückfrage:
wenn in der Tabelle A Eintragungen wären

ID...Host...msg
97...40.....TEXT1
98...50.....TEXT1
99...50.....TEXT2

und in Tabelle B
ID...Host...msg
1....50.....TEXT1

welche Zeilen sollen dann in der Ergebnistabelle erscheinen ?

In der Ergebnistabelle sollten dann folgende Einträge stehen:
97...40.....TEXT1
99...50.....TEXT2
 
ok , dann versuch mal:

SELECT spalten
FROM tabelleA A
WHERE NOT EXISTS
( select *
from tabelleB B
where A.host = B.host
and A.msg = B.msg ) ;


oder

SELECT spalten
FROM tabelleA A
LEFT JOIN tabelleB B
ON a.host = b.host
AND a.msg = b.msg
WHERE b.msg IS NULL ;

oder

SELECT spalten
FROM tabelleA
WHERE (host,msg)
NOT IN
( SELECT host,msg
FOM tabelleB ) ;

unter z/OS funktionieren alle drei Möglichkeiten Welche Syntax das MySQL versteht kann ich nicht aus dem Stegreif sagen. Die erste Variante sollte aber auf alle Fälle funktionieren.
 
Zuletzt bearbeitet: