如何才能使此查询打印仅存在于一个表中的记录?

时间:2014-04-28 02:24:42

标签: sql database select sql-scripts

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

答案 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;