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

Posted

技术标签:

【中文标题】如何让此查询打印仅存在于一个表中的记录?【英文标题】:How can I get this query to print a record that only exists in one table? 【发布时间】:2014-04-28 02:24:42 【问题描述】:

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

【讨论】:

teacher 在教联接方面做得并不好。当我在那里的时候,我在宾夕法尼亚州立大学有一个 db 课程,并且知道我们使用它们,但是出于某种原因,我现在大学的老师正在按照我的方式进行操作,所以我正在尝试这种方式。不过感谢您的建议,我将更改我的脚本并希望它有效。再次感谢 @user3255899 。 . .我很抱歉你有一个给出糟糕建议的老师。唉,你不是唯一一个。 正如@Gordon 所说,使用JOIN..ON.. 样式。

以上是关于如何让此查询打印仅存在于一个表中的记录?的主要内容,如果未能解决你的问题,请参考以下文章

根据查询结果和变量更新表中的记录 - 结果仅返回变量中第一个 int 的记录

LINQ - 如何根据仅存在于某些记录中的另一个元素选择一个元素

如何编写一个 MySQL 查询,该查询返回一个临时列,其中包含与该行相关的项目是不是存在于另一个表中的标志

SQL中,如何查询存在一个表而不在另一个表中的数据记录

如果所有记录都存在于 sql server 的另一个表中,则返回行列表

SQL Server 查询。用户存在于另一个表中但不存在用户的位置