我正在尝试创建一个查询,该查询将接受来自用户的日期,并根据此日期显示来自两个表的信息。这适用于我的所有测试,除了我的上一次测试。我的上一次测试,我输入的日期应该返回一个只存在于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)
);
答案 0 :(得分: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;