MINUS OPERATOR gibt "Abfrageblock hat falsche Anzahl an Ergebnisspalten aus"

DerAskTyp

Mitglied
Hallo ich habe eine emlyer und department tabelle und ich will dass ich die emplyer herausfilter mit dem minus operator!

SELECT * from scott.emp
MINUS
SELECT * from scott.emp inner join scott.dept on scott.emp.deptno = scott.dept.deptno;

Ist es möglich das mit dem minus operator?
 
Moin DerAskTyp.

wie schon Yaslaw schrieb, Oracle kennt die SELECT MINUS-Syntax.

Allerdings müssen die Feldlisten im ersten SELECT und im MINUS SELECT gleich sein, d.h. dein Versuch oben würde einen Fehler werfen, da das zweite SELECT mit JOIN mehr Felder beinhaltet als das erste.

Formal richtig wäre dann, im MINIS SELCT-Teil auch nur die Felder der emp-Tabelle zu verwenden.
Code:
SELECT * from scott.emp
MINUS
SELECT e.* from scott.emp e inner join scott.dept on scott.emp.deptno = scott.dept.deptno;

Wie gesagt, formal richtig.
In deinem Bespiel wäre aber sinnvoller, es über LEFT JOIN und eine WHERE Bedingung einzuschränken.

MINUS SELECT... gibt es bei Oracle, gleichbedeutend ist EXCEPT SELECT (Standard-SQL, z.B. DB2, MSSQL,..)
Nur mySQL kennt weder noch; da wäre die Mimik über ein LEFT JOIN ...WHERE oder ein WHERE [NOT] EXISTS.

Grüße
Biber
 
Zuletzt bearbeitet:
Zurück