0

私は今 2 つのテーブルを持っています, すでに定義されています
. 最初のものはwrote秒と呼ばれますpublication

出版物には2つのフィールドがあります:

title1, title2 

書き込みには3つのフィールドがあります:

Serial number, title1, title2

2 番目のテーブルの外部キーtitle1,title2は、最初のテーブルの主キー (両方のフィールド) に対する制約です。
ここで、2 番目のテーブル ( ) からデータを受け取りたいと思います。title1,title2これらの行に基づいて、最初のテーブルから行を削除します。この情報を取得して「保存」するためにビューを使用しています。

データを正常に受信しましたが、削除しようとすると、制約に失敗したというエラーが表示されるため、から削除する前に「書き込み」から行を削除する必要がpublicationありますが、行の削除に到達するたびにクエリからpublication空が返されます(削除された情報に基づいているため)

「ビュー」ではない「一時テーブル」のように作成する方法はありますか?クエリに使用したテーブルから情報を削除しても、その中のデータは保存されますか?

完全なクエリは次のとおりです:(コメントで述べたように新しいテーブルを作成せずに)

create or replace view WritersPerPub as
select wrote.ven_title as v2, wrote.pub_title as p2, count(pub_title) as NumOfWriters
from wrote
group by pub_title,ven_title;

create or replace view NathanWrote as
select publication.ven_title as v1 , publication.pub_title as p1
from publication,wrote
where wrote.ven_title = publication.ven_title AND
      wrote.pub_title = publication.pub_title AND
      wrote.serial_number = (   select serial_number
                                from researcher as r
                                where r.firstname = 'Nathan' AND r.surname = 'Keller');

create or replace view WrittenOnlyByNathan as
select NathanWrote.v1, NathanWrote.p1
from WritersPerPub, NathanWrote
where WritersPerPub.p2 = NathanWrote.p1 AND
      WritersPerPub.v2 = NathanWrote.v1 AND
      WritersPerPub.NumOfWriters = 1;

# Delete Nathan Keller from 'Wrote' table
delete from wrote
where serial_number = (select r.serial_number as rf1
                        from  researcher as r
                        where r.firstname = 'Nathan' AND r.surname = 'Keller');

delete from publication USING publication INNER JOIN WrittenOnlyByNathan 
where publication.pub_title = WrittenOnlyByNathan.p1 AND
  publication.ven_title = WrittenOnlyByNathan.v1;
4

0 に答える 0