2016-05-01 20 views
0

私はSQLコマンドを関係代数に変換しようとしています。最も大きな問題は、リレーショナル代数ではない「NOT IN」SQL文があることです。そう、彼らは完全prerequisityませんでした - トレーニングにこのquartalを持っていますが、この訓練のためのすべての前提条件を持っていない従業員からSQLをリレーショナル代数に変換する - 次に何をするのですか?

を選択し、従業員ID、姓とtraining_id(訓練から):

私のクエリは、これをしませんでした決して訓練しない。

結果がXで終わる場合は、正常に完了していないことを意味します。

TABLES:

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 (−)

の使用を示唆して設定し、差分演算の結果は、1つのリレーションに存在しているが、第2の関係にないタプル、です。

PROJECT[employee_id,lastname, training_id](SELECT[quartal='first',year='2016'] 
    ([email protected]@[email protected])) - (PROJECT training_id .... 
関連する問題