Как я могу получить этот запрос для печати записи, которая существует только в одной таблице?

Я пытаюсь создать запрос, который будет принимать дату от пользователя и отображать информацию из двух таблиц на основе этой даты. Это работает для всех моих тестов, кроме моего последнего теста. В моем последнем тесте я ввожу дату, которая должна возвращать запись, которая существует только в таблице 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;
Другие вопросы по тегам