2016-05-01 71 views
0

我试图将SQL命令转换为关系代数。最大的问题是有一个“NOT IN”SQL语句不在关系代数中。将SQL转换为关系代数 - 接下来要做什么?

我的查询做:

选择员工ID,姓和名员工,谁拥有训练这个quartal但没有对本次培训的所有先决条件training_id(从训练) - 所以他们并没有完全prerequisity从不训练。

如果结果以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']([email protected]@[email protected])) # here is the problem 

如何在RA中模拟“NOT IN”命令?

回答

0

我建议你使用Set Difference (−)

差集操作的结果是元组,这是目前在一个关系,但不是在第二个关系。

PROJECT[employee_id,lastname, training_id](SELECT[quartal='first',year='2016'] 
    ([email protected]@[email protected])) - (PROJECT training_id ....