mysql4.0を使用しています。

A,Bというテーブルがあります。
それぞれ、neta という項目があり、

A
neta
---
いか
たこ
はまち

B
neta
---
いか
はまち
さば


というような形でデータが入っています。
この時、A,Bの両方に入っているデータだけを選び出し、その選択結果を、Aに反映させたいのですが、どのようなSQLを書けばよいでしょうか?

上の例でいうと、

A
neta
----
いか
はまち

としたいのですが。Bはそのままでいいです。

回答の条件
  • 1人5回まで
  • 登録:2006/07/11 08:24:12
  • 終了:2006/07/11 09:37:04

ベストアンサー

id:bonlife No.3

回答回数421ベストアンサー獲得回数752006/07/11 09:32:45

ポイント78pt

MySQLはバージョン4.0ではサブクエリは使えません。

4.1からサブクエリに対応しています。

[参考URL]

集合差問い合わせのMINUSも使えませんので、単純なSQLのみでは対応不可能です。

例えば、PHPの場合でしたら、以下のような流れで対応可能だと思います。

  • 両テーブルの検索結果を取得し、配列に格納 (検索時にORDER BYでソートしておく)
  • array_diff_assocで配列の差を配列として取得
  • 差の配列内容を元にSQL(DELETE文)を生成
  • DELETE文発行

参考になれば幸いです。

id:bonyan

ありがとうございます。やっぱりこのバージョンでは、SQLだけではできないんですね。

perl使ってるので、別の方法で考えてみます。

ありがとうございました。

2006/07/11 09:36:00

その他の回答(2件)

id:freemann No.1

freemann回答回数315ベストアンサー獲得回数502006/07/11 08:57:18

ポイント1pt

しばらくSQLを書いてないのでうろ覚えですが、

delete From A where A.neta not in (select A.neta from A B Where A.neta = B.neta)

でよろしいかと

id:ohmix1 No.2

ohmix1回答回数235ベストアンサー獲得回数142006/07/11 09:04:06

ポイント1pt

DELETE FROM A WHERE A.neta NOT IN (SELECT B.neta FROM B)

サブクエリでBにはないネタをAから削除する。

でどうでしょう?

mysql4.0で試してないので確認願います。

以上

id:bonlife No.3

回答回数421ベストアンサー獲得回数752006/07/11 09:32:45ここでベストアンサー

ポイント78pt

MySQLはバージョン4.0ではサブクエリは使えません。

4.1からサブクエリに対応しています。

[参考URL]

集合差問い合わせのMINUSも使えませんので、単純なSQLのみでは対応不可能です。

例えば、PHPの場合でしたら、以下のような流れで対応可能だと思います。

  • 両テーブルの検索結果を取得し、配列に格納 (検索時にORDER BYでソートしておく)
  • array_diff_assocで配列の差を配列として取得
  • 差の配列内容を元にSQL(DELETE文)を生成
  • DELETE文発行

参考になれば幸いです。

id:bonyan

ありがとうございます。やっぱりこのバージョンでは、SQLだけではできないんですね。

perl使ってるので、別の方法で考えてみます。

ありがとうございました。

2006/07/11 09:36:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません