Как я могу получить этот запрос для печати записи, которая существует только в одной таблице?
Я пытаюсь создать запрос, который будет принимать дату от пользователя и отображать информацию из двух таблиц на основе этой даты. Это работает для всех моих тестов, кроме моего последнего теста. В моем последнем тесте я ввожу дату, которая должна возвращать запись, которая существует только в таблице expmast и не существует в таблице expbycc. Когда я ввожу дату, чтобы попытаться вернуть эту запись, она сообщает, что записи не найдены. Я знаю, что это потому, что в моем, где у меня есть AND, который проверяет, если M.ExpNum = C.ExpNUm, что не верно для этой записи, потому что она существует только в одной таблице. Я не могу понять, как заставить этот запрос работать. Любая помощь / совет с благодарностью. Ниже приведен мой сценарий, за которым следуют структуры таблиц, используемые для этого запроса, спасибо.
Автор сценария:
ACCEPT Date PROMPT 'Enter a date:';
SELECT M.ExpNum, EDate, IsCash, StoreCode, CashAmt, CType, CCNum, Amt
FROM ExpMast M, ExpByCc C
WHERE EDate = to_date('&Date','mm-dd-yy')
AND M.ExpNum = C.ExpNum;
Таблицы:
CREATE TABLE EXPMAST
(ExpNum NUMBER(2,0) NOT NULL PRIMARY KEY,
EDate DATE,
IsCash VARCHAR2(1),
StoreCode VARCHAR2(4),
CONSTRAINT fk_STORE_EXPMAST FOREIGN KEY (StoreCode)
REFERENCES STORE (Code)
);
CREATE TABLE ExpByCC
(ExpNum NUMBER(2,0) NOT NULL,
CType VARCHAR2(1) NOT NULL,
CCNum VARCHAR2(16) NOT NULL,
Amt DECIMAL(5,2),
CONSTRAINT fk_CRCARD_ExpByCC FOREIGN KEY (CType, CCNum)
REFERENCES CRCARD (CType, CCNum),
CONSTRAINT fk_EXPMAST_ExpByCC FOREIGN KEY (ExpNum)
REFERENCES EXPMAST (ExpNum),
CONSTRAINT pk_ExpByCC PRIMARY KEY (ExpNum, CType, CCNum)
);
1 ответ
Тебе необходимо left outer join
, И вы не можете выразить внешнее соединение, используя ваш неявный join
синтаксис. Вы хотите использовать явные объединения в from
пункт.
Простое правило: НИКОГДА не используйте запятые в from
пункт.
Теперь это легко:
SELECT M.ExpNum, EDate, IsCash, StoreCode, CashAmt, CType, CCNum, Amt
FROM ExpMast M LEFT OUTER JOIN
ExpByCc C
ON M.ExpNum = C.ExpNum AND
WHERE M.EDate = to_date('&Date','mm-dd-yy') AND
C.ExpNum IS NULL;