お世話になります、
Oracleで、delete文で困っています。

関係しあう二つのテーブルtab1,tab2があります。

二つのテーブルから同時に関係する項目を削除する
場合、同時に両方のテーブルの関係する項目を削除する場合どのような文になるのでしょうか、

delete from で複数のテーブルをしてすることはできないし、

delete from (select * from tab1,tab2)というような感じでデリートしても、片方のテーブルしかデリートされません。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

結合VIEWで定義しておけば消せると思います。


詳しくはORACLEのマニュアルORACLE概要をご覧ください。

#バージョンに依存する機能もあるので質問の際にはバージョンも明記した方が良いと思いますよ。
    • good
    • 0

「制約」があるテーブル、という意味ではないんですね?



ならばあらかじめ削除対象を別テーブルに抽出しておいて、
その後にDELETE文を2本実行ではどうでしょうか?

この回答への補足

削除条件を抽出しておいて、
それを使ってデリート文を2本実行するしかないでしょうか…

手間がかかりますね、
ありがとうございました。

補足日時:2001/08/17 21:17
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q複数テーブルに対するDELETE文が失敗

BooksDataテーブルのBookID436のレコードについて
BooksCategoryとBooksDataテーブルを削除するSQLが失敗します。
どこが悪いのでしょうか。

[BooksCategory]
BookID

[BooksData]
BookID

DELETE BC.*,BD.*
FROM BooksCategory AS BC, BooksData AS BD
WHERE BD.BookID=BC.BookID AND BD.BookID=439;

Aベストアンサー

最近のDBは複数テーブルを一括で削除ってできるんですか・・・?
DELETE FROM BooksCategory
WHERE BookID=439;
DELETE FROM BooksData
WHERE BookID=439;
しかできないと思ってたんですが

Qあるテーブルの内容を基準にして違うテーブルを更新するSQL文

教えて下さい。

あるテーブルに下記の内容があります。
ID│名称
─┼───
1│花
2│木
3│水

もうひとつのテーブルには、
ID│名称
─┼───
1│海
3│水
4│空
となっています。
最初のテーブルの全レコードを対象に、最初のテーブルのIDと同じ値がもうひとつの
テーブルにある場合、もうひとつのテーブルをUPDATEし、存在しなければINSERTしたい
です。
結果を
ID│名称
─┼───
1|花
2│木
3│水
4│空
を期待しています。

このようにするSQL文を教えていただけませんでしょうか。
よろしくお願いします。

Aベストアンサー

良く似た質問が過去に有りました。
回答2がぴったりだと思います。
参考にしてください。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=604829

QDELETE文のWHERE条件にSUBSTRを使いたい 

DB2+eclipse2.1で開発しています。

テーブルのデータ削除に条件を付け加えたいのですが、
strSql = "DELETE FROM スキーマ名.テーブル名 WHERE substr(ABC,1,6) < " + "200404";
というように、SQL文を書くと、

------------------------------------
[IBM][CLI Driver][DB2/NT] SQL0440N 互換引き数を持つタイプ "FUNCTION" の名前 "SUBSTR" の許可ルーチンが見つかりませんでした。 SQLSTATE=42884
------------------------------------

上記エラーが出ます。
DB2でSUBSTRって使えると思うのですが。

ご存知の方いましたら、教えてください。
よろしくお願いします。

Aベストアンサー

SUBSTRで使っているABCは、カラムでしょうか?質問中のステートメントを見る限りそうだと思われますが、もし文字列定数だったらシングルクォーテーションが必要ですね。

DB2がどうかはあまり使った事がないので自信がないのですが、大抵のRDBMSは構文解析中に遭遇した解析不可能な点につき、人間の観点からすると相応しくないのではというようなエラーを返すので、100%信用しない方がいいかもしれません。

QSQL*PLUSでファイルからDELETE文

お世話になります、

Oracle8のSQL*PLUSを使用方法についての質問です。

ローカルにファイル(delete.sql)を作成して
SQL*PLUSからそのファイルを流してファイルの中身の処理を実行するという方法をご存知の方が
いらっしゃったらおしえてください。

--delete.sqlの中身---------
delete from table_a
delete from table_b
delete from table_c
delete from table_d
delete from table_e
以下省略

よろしくお願いします。

Aベストアンサー

SQL*Plusには、ファイルの内容をリダイレクトで実行する機能があります。

DOSプロンプトから

>PLUS80W.EXE system/manager@orcl < delete.sql

と入力してください。

ただし、ユーザー名、パスワード、インスタンス名などはそちらの環境に合わせてください。
ちなみに、delete.sqlの最後に、exitと記述しておけば、終了後にSQL*plusを自動的に終了します。
また、delete.sqlの先頭に、spool delete.logとしておけば、実行のログを作成できます。

SQL*Plusの実行ファイル名はOSやOracleのバージョンによって変わりますが、NTのOracle8なら上記のファイル名で大丈夫だと思います。

QFROM テーブル 名前 ?

SQLについての質問です.

select a.name, b.id
from テーブルA a
テーブルB b
where...

というSQLのfromのあとはどういう意味なのでしょうか?
テーブルAと同じ型のaを作る
という意味なのでしょうか??

Aベストアンサー

厳密に書くと

SELECT a.name, b.id
FROM テーブルA AS a ,
テーブルB AS b
WHERE...

となります。
FROM句で宣言している
テーブルA AS a
は、
「テーブルAをaという名前で扱いなさい」
という意味。

もちろん
SELECT テーブルA.name, テーブルB.id
FROM テーブルA ,
テーブルB
WHERE...
と書いても同意ですが、
SELECT句にいちいち
テーブルA.* , テーブルA.** , テーブルA.***
と書くのは面倒ですよね。

さらに、副問い合わせや、同一テーブルを別々に扱いたい場合などなどなど・・・・
様々な場面で AS を使うことで、すっきりと見やすいSQL文を作ることも可能です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報