【发布时间】:2019-03-05 18:24:05
【问题描述】:
我现在正在做一个项目,我需要通过 SQL *PLUS 向我的数据库提出一些请求。
这就是我想要做的。 我想得到一张表,在其中我得到带有这些条件的教授名字和姓氏(我必须验证第一个条件,然后是另一个):
(首先)在一个会话中(比如说 12004),一位教授确实教授了这两门课程,INF3180 和 INF2110
(第二次)在另一个课程 32003 中,一位教授确实教授了这两门课程,INF1130 和 INF1110
这是创建数据库的代码:
CREATE TABLE Professor
(professorCode CHAR(5) NOT NULL,
lastName VARCHAR(10) NOT NULL,
firstName VARCHAR(10) NOT NULL,
CONSTRAINT PrimaryKeyProfessor PRIMARY KEY (professorCode)
)
;
CREATE TABLE Group
(sigle CHAR(7) NOT NULL,
noGroup INTEGER NOT NULL,
sessionCode INTEGER NOT NULL,
maxInscriptions INTEGER NOT NULL,
professorCode CHAR(5) NOT NULL,
CONSTRAINT PrimaryKeyGroup PRIMARY KEY
(sigle,noGroupe,sessionCode),
CONSTRAINT CESigleGroupeRefCours FOREIGN KEY (sigle) REFERENCES Cours,
CONSTRAINT CECodeSessionRefSession FOREIGN KEY (sessionCode) REFERENCES
Session,
CONSTRAINT CEcodeProfRefProfessor FOREIGN KEY(professorCode) REFERENCES
Professor
)
;
这是我目前不工作的请求:
SELECT DISTINCT Professor.firstName, Professor.lastName
FROM Professor, Group
WHERE Group.professorCode = Professor.professorCode
AND Group.sessionCode = 32003
AND (Group.sigle = 'INF1130' AND
Group.sigle = 'INF1110')
OR Group.sessionCode = 12004
AND (Group.sigle = 'INF3180' AND
Group.sigle = 'INF2110')
我知道有一种方法可以将这两个结果结合起来,但我似乎找不到。
在这种情况下只有一个匹配项:
- 只有一个匹配 32003 : INF1130, INF1110
- 与 12004 不匹配:INF3180、INF2110
结果表应该如下所示:
--------------------------
First Name Last Name
--------------------------
Denis Tremblay
Gordon Linoff 提出的解决方案看起来非常好,除了它没有返回任何表格,因为使用以下代码,它需要包含 4 个课程和 2 个 sessionCode。这里的问题是它需要验证条件并附加结果。假设会话 12004 的条件没有结果,那么我可以将其视为 NULL。然后,第二个条件,会话 32003,给了我一个匹配。它应该附加两个结果,给我提供的表格。
我只想为此做一个请求。
非常感谢!
编辑:重新制定
EDIT2:举一个已知匹配的例子
EDIT3:进一步解释为什么建议的解决方案不起作用
【问题讨论】:
-
不确定 Oracle 或 sql plus,但您可能正在寻找存在的位置或位置。因为一条记录不能同时满足这两个条件。
-
请提供符合条件和不符合条件的教授示例。
-
只有一位教授与请求匹配。它只响应 INF1110、INF1130 和 32003。没有一个匹配 INF3180、INF2110 和 12004。它必须显示匹配的那个
-
刚刚添加了一个例子! @GordonLinoff
-
如果不匹配示例输入,示例输出将无济于事 - 包括应该不出现在结果集中的数据。您说您的查询“不起作用”,但这意味着什么 - 您是否遇到错误?结果太多?不够?请在您的问题中包含当前结果以及示例数据,并解释错误的原因。