【最大10000ポイント】当たる!!質問投稿キャンペーン!

お世話になります。
うまい資料が見つからなかったので質問させてください。

例えば、下記のようなテーブルが3つあったとします。

<table1>
id
name
date

<table2>
id
tel

<table3>
id
etc

name,date,tel,etcは同タイミングで一括に登録され、3テーブルともに共通のidで保存されます。
この時、table1のdate(日付が入ります)が30日以上経過しているデータについて、いずれのテーブルからも削除したいと思っています。
こんな場合、どんなSQL文を書けば良いのでしょうか?

お分かりになる方、何卒よろしくお願いしますm(_ _)m

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

A 回答 (1件)

RDBMSは、ここのカテゴリ通りMySQLですか?


バージョンは?

MySQLなら、独自機能で複数表の削除が可能です。
MySQLでないなら、同じトランザクション内でそれぞれの表から削除するとか、トリガを利用するといった方法が考えられます。

MySQLの場合の例です。

delete tbl1,tbl2,tbl3 from tbl1,tbl2,tbl3
where tbl1.id=tbl2.id and tbl2.id=tbl3.id
and tbl1.`date`<date('2008-02-28')-interval 1 month

今日の日付を自動的に拾うには、curdate関数やcurrent_date関数を使う方法があります。

<マニュアル参照先>
http://dev.mysql.com/doc/refman/4.1/ja/delete.html
http://dev.mysql.com/doc/refman/4.1/ja/date-and- …
    • good
    • 0
この回答へのお礼

まさにビンゴ!でした。
ちなみにMySQLの4.1.20です。
初心者にご丁寧にありがとうございました。
助かりましたm(_ _)m

お礼日時:2008/02/22 21:04

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

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

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

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

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

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

QSQL、2つのテーブルで条件一致したものだけdeleteする方法は?

オラクルSQLで質問です

やりたいことは、
テーブルAから以下の条件に該当するデータを削除する。
基本的にはテーブルBの内容と比較して、一致したもの。

条件(全ての条件を満たすこと)
 テーブルA.AAA = テーブルB.AAA
 テーブルA.BBB = テーブルB.BBB
 テーブルB.CCC > 0


調べたところ、SQLサーバでは以下のように
from を2つ書いて実現できるようです。
が、今回はオラクルなので文法エラーになります。

delete FROM テーブルA FROM テーブルB
where
テーブルA.AAA = テーブルB.AAA
AND
テーブルA.BBB = テーブルB.BBB
AND
テーブルA.CCC > 0
;
commit;


よろしくお願いします

Aベストアンサー

delete 文の細かい構文はちょっと覚えてませんが
サブクエリ使えばいいんじゃないですか

delete from table_a
where 主キーカラム = (
select table_a.主キーカラム
from table_a, table_b
where
指定の条件
)

Q複数のテーブルの項目を同時に削除したい

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

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

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

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

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

よろしくお願いします。

Aベストアンサー

結合VIEWで定義しておけば消せると思います。
詳しくはORACLEのマニュアルORACLE概要をご覧ください。

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

Q異なるテーブルのレコード削除

オラクル初心者です。宜しくお願いします。
AAA、BBB、CCCというテーブルがあると仮定します。
画面から入力された値(ddd)をキーとして、CCCテーブルから該当するレコードをセレクト文で引っ張り、eeeという値を抜き出したとします。
そのeeeという値をキーにAAA、BBBテーブルのレコードを削除するにはどういうSQLを発行すればよろしいでしょうか?
"delete from
AAA, BBB
where eee =
(select eee from CCC where fff = ddd);"
では駄目でした。
質問が下手でわかりにくいかもしれませんが、どうかご教授お願いします。

Aベストアンサー

DELETE文1文では、1つのテーブルに対してしか操作できませんので、
DELETE文を2つ投入するか、PL/SQLブロックとして投入するかいずれかに
なります。
(無名PL/SQLが投入できるミドルウエアと投入できないミドルウエアがあります)

Qmysql複数レコードをまとめて削除ってできますか?

php、mysqlを勉強しております。

phpを使って、mysqlの複数レコードをまとめて削除する方法を探しています。

※テーブル名[sample]
ID NAME
1  ABC
2  BCD
3  CDE
4  DEF
5  EFG

このようなテーブルがあるとして、IDの2、3、5を削除したいと考えています。
その場合、下記のように3回、クエリを実行しなければいけないのでしょうか。

DELETE FROM sample WHERE ID = 2
DELETE FROM sample WHERE ID = 3
DELETE FROM sample WHERE ID = 5

詳しい方がいらっしゃいましたら、ご教授いただけないでしょうか。
よろしくお願い致します。

Aベストアンサー

DELETE FROM sample WHERE ID IN ( 2,3,5)

QDELETEについて(結合による)

次のような操作がしたいのですが・・・
Test1
t1 t2
1 A
2 B
3 C --ココ
Test2
tt1 tt2 tt3
1 1 AA
1 2 BB
2 1 CC
4 1 DD --ココ

結果
ココの部分を削除したい。
Test1とTest2を関係付けられなかった部分(Test.t1=Test2.tt1のinnerjoinの逆)を削除したいのです。

アドバイスあれば、宜しくお願いします。

Aベストアンサー

#1です。
キーが2つ以上あるならば、EXISTS句を使ってください。

DELETE a FROM Test1 a
WHERE NOT EXISTS (SELECT NULL FROM Test2 WHERE tt1=a.t1 AND tt2=a.t2)

DELETE a FROM Test2 a
WHERE NOT EXISTS (SELECT NULL FROM Test1 WHERE t1=a.tt1 AND t2=a.tt2)

QSQL 複数テーブルのupdate

こんばんは。
複数テーブルの複数カラムをupdateしたいのですが、
うまくいかず困っています。
どなたか助けてください>_<

テーブルA(tableA)のoptionAというカラムと、
テーブルB(tableB)のoptionBというカラムを両方更新したいんです。

やりたい内容のイメージとしてはこんな感じです↓
update tableA a, tableB b
set a.optionA='OK', b.optionB='OK'
where a.student_id=b.student_id and a.name='山田';

どなたかご指導お願いいたします。

Aベストアンサー

where条件に別テーブルの結合を必要とするので、同時に更新したい・・・
ということならば、以下のようなupdate文を2回発行ではだめなんでしょうか?

update tableB b
set b.optionB='OK'
where exists(
select * from tableA a
where a.student_id=b.student_id and a.name='山田'
);

update tableA a
set a.optionA='OK'
where a.name='山田';

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。

Q2つのテーブルに共通するレコードを削除したい

2つのテーブルがあり、両方にID番号フィールドが存在しています。
Aテーブルは元のデータ
Bテーブルは削除したいレコードのID番号
という構成になっているとき、
AテーブルとBテーブルの共通するレコードを削除するにはどうすればよいでしょうか。

ものすごく単純な質問で申し訳ないのですが...宜しくお願いします

Aベストアンサー

1、テーブル内容
 Aテーブル フィールド:ID番号、・・
 Bテーブル フィールド:削除番号、・・

2、まず、選択クエリで削除したいIDのサブクエリを作る。
  ・AテーブルとBテーブルのIDを結合。
  ・表示のSQLでサブクエリをゲット
   内容は
     SELECT Aテーブル.ID番号
     FROM Aテーブル INNER JOIN Bテーブル
ON Aテーブル.ID番号 = Bテーブル.削除ID;   

3、次に削除クエリを作成
  ・新規クエリで削除クエリを作成
  ・Aテーブルのみ選択
  ・ID番号を下にドラッグ
  ・その抽出条件に2で作成したサブクエリを「;」を外して
   IN (  )をつけて入力
   内容は
     IN (SELECT Aテーブル.ID番号
     FROM Aテーブル INNER JOIN Bテーブル
     ON Aテーブル.ID番号 = Bテーブル.削除ID)

 これで、クエリを実行することにより、Aテーブルの内容が、
 Bテーブルの削除番号と同じID番号のレコードを削除できます。

1、テーブル内容
 Aテーブル フィールド:ID番号、・・
 Bテーブル フィールド:削除番号、・・

2、まず、選択クエリで削除したいIDのサブクエリを作る。
  ・AテーブルとBテーブルのIDを結合。
  ・表示のSQLでサブクエリをゲット
   内容は
     SELECT Aテーブル.ID番号
     FROM Aテーブル INNER JOIN Bテーブル
ON Aテーブル.ID番号 = Bテーブル.削除ID;   

3、次に削除クエリを作成
  ・新規クエリで削除クエリを作成
  ・Aテーブルのみ選択
...続きを読む

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む


人気Q&Aランキング