私は今 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;