SQL Simple Abfrage: 2 Tabellen vergleichen

Peter909

Cadet 4th Year
Registriert
Aug. 2005
Beiträge
101
Hi Leute,

bin Postgresql Noob und will eigentlich nur eine simple Abfrage ausführen.

Ich hab 2 Tabellen(tg_user und company) in denen die Spalte company_id vorkommt.

Ich will zwei Tabellen miteinander vergleichen und nur die Zeilen mit den company_ids anzeigen die nicht in tg_user vorkommen. Quasi das Delta beider Tabellen


SELECT *
FROM company
WHERE company.company_id IN

(SELECT DISTINCT tg_user.company_id FROM tg_user);

Mit diesem Befehl kann ich die Zeilen anzeigen bei denen die company_id in beiden Tabellen vorkommt. Ich will quasi die Verneinung. Also sowas wie

SELECT *
FROM company
WHERE company.company_id !=

(SELECT DISTINCT tg_user.company_id FROM tg_user);


funktioniert aber leider nicht.

Kann mir jemand helfen?

Danke im Voraus
 
Versuch mal was in der art:

Code:
SELECT a.company_id
FROM tg_user AS a
LEFT JOIN company AS b ON a.company_id = b.company_id
WHERE b.company_id IS NULL
 
Hi und danke für die Antworten,

@BluBohr: NOT IN bringt keine Datensätze, was nicht sein kann.


@bu1137

SELECT a.company_id
FROM tg_user AS a
LEFT JOIN company AS b ON a.company_id = b.company_id
WHERE b.company_id IS NULL

bringt mir 219 Datensätze, aber leider wird mir nur die Spalte company_id angezeigt und die Werte sind alle "NULL".

Sieht also so aus:

company_id
NULL
NULL
NULL
usw.

wie muß ich den Befehl ändern um die anderen Spalten anzeigen zu lassen?

Danke im voraus
 
Immer diese ollen Join(t)s... ;)

Code:
SELECT * FROM company WHERE company_id NOT IN (SELECT company_id FROM tg_user);

War also schon fast richtig, DISTINCT im inneren SELECT dürfte optional sein...
 
SELECT * dürfte probleme bringen (company_id is ambiguous)... Aber mein query war eh nicht ganz richtig (verkehrt), du willst ja alle, die nicht in tg_user vorkommen. das wär dann eher in die richtung. Ich weiss zwar nicht, ob's so auch bei postgres klappt, aber, sollte ja eigentlich.

Code:
SELECT a.company_id
FROM company AS a
LEFT JOIN tg_user AS b ON a.company_id = b.company_id
WHERE b.company_id IS NULL

Edit: ja, sollte klappen, gute Analyse hier, und dort sieht man auch gleich, warum diese Methode und nicht die NOT IN Variante verwendet werden sollte.
 
Zuletzt bearbeitet:
Zurück
Oben