Мне кажется, что вы думаете, что ваш код будет интерпретирован так (обратите внимание на дополнительные скобки):
CREATE TABLE Example AS
SELECT FNAME
FROM Employee
WHERE Employee.ID IN ((SELECT ID FROM Engineer) OR (SELECT ID FROM Manager))
ORDER BY FNAME DESC;
Однако на самом деле это было истолковано так:
CREATE TABLE Example AS
SELECT FNAME
FROM Employee
WHERE (Employee.ID IN (SELECT ID FROM Engineer)) OR (SELECT ID FROM Manager)
ORDER BY FNAME DESC;
OR
используется для объединения двух условий (логических выражений). Employee.ID IN (SELECT ID FROM Engineer)
- логическое выражение (имеет значение true / false), но (SELECT ID FROM Manager)
- нет. Oracle немного запутался из-за вашего кода, потому что ожидал, что это выражение будет сравниваться с чем-то другим, но не нашел то, что искал.
Вы, вероятно, хотите вместо этого:
CREATE TABLE Example AS
SELECT FNAME
FROM Employee
WHERE Employee.ID IN (SELECT ID FROM Engineer)
OR Employee.ID IN (SELECT ID FROM Manager)
ORDER BY FNAME DESC;
Вы также можете написать следующее, что в некоторой степени ближе к тому, что вы пытались:
CREATE TABLE Example AS
SELECT FNAME
FROM Employee
WHERE Employee.ID IN (SELECT ID FROM Engineer UNION SELECT ID FROM Manager)
ORDER BY FNAME DESC;