如何让此查询打印仅存在于一个表中的记录?
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 查询,该查询返回一个临时列,其中包含与该行相关的项目是不是存在于另一个表中的标志