【发布时间】:2016-08-26 03:32:23
【问题描述】:
我正在尝试将 SQL 命令转换为关系代数。最大的问题是有一个“NOT IN”SQL 语句不在关系代数中。
我的查询是这样的:
从员工中选择员工 id、姓氏和 training_id(来自培训),这些员工接受过本季度的培训,但不具备此培训的所有先决条件 - 因此他们从未完成过先决条件培训。
如果结果以X结尾,则表示没有成功完成。
表格:
employee(employee_id, first_name, last_name)
training(training_id, quartal, year, name)
enrollment(employee_id, training_id, quartal, year, result)
prerequisity(training_id, prerequisity_id)
我的 SQL 查询:
select e.employee_id, lastname, training_id from employee as e NATURAL JOIN enrollment NATURAL JOIN training NATURAL JOIN prerequisity WHERE quartal = 'first' and year = '2016' and training_id NOT IN (select e.training_id from enrollment as e NATURAL JOIN employee as ee where e.employee_id=ee.employee_id and result not like '%X' and result is not NULL)
这可能是正确的 SQL,所以现在我要把它转换成关系代数:
PROJECT[employee_id,lastname, training_id](SELECT[quartal='first',year='2016'](employee@enrollment@training@prerequisity)) # here is the problem
如何在 RA 中模拟“NOT IN”命令?
【问题讨论】: