- 締切済み
MySQLで別テーブルを参照し、レコードを消したい
お世話になります。MySQL4のデータベース上に2つのテーブルがあるのですが、 片方のテーブル(a)にあるフィールド(b_id)の値を参照し、もう片方のテーブル(b)のレコードを消していきたいのです。 具体的には以下のようなテーブル(a)とテーブル(b)があります。 TBL: a =========================== id b_id category =========================== 0 1 3 --------------------------- 1 2 1 --------------------------- 2 3 2 --------------------------- 3 4 2 --------------------------- TBL: b =========================== id name price =========================== 0 goodsA 1,000 --------------------------- 1 goodsB 500 --------------------------- 2 goodsC 250 --------------------------- 3 goodsD 2,500 --------------------------- 4 goodsE 1,800 --------------------------- やりたいことは、テーブル(a)の「category」フィールドが「2」以外であれば、 そのレコードの「b_id」にある数値を「id」にもつ、テーブル(b)のレコードを消していきたいのです。 上記の例だと、テーブル(a)のid「0」と「1」がcategoryに「2」以外を持っています。 この2つのレコードのb_idは「1」と「2」ですので、テーブル(b)のid「1」と「2」を消したいと思っています。 SQLについて知識がなく、困っています。どなたかご存知の方がいらっしゃいましたら、お知恵をお貸しください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
- yamada_g
- ベストアンサー率68% (258/374)
補足
さっそくのご回答ありがとうございます。上の質問内容の通り、テーブルaとbを作成し、ご回答いただいたSQL文を打ち込んでみました。 mysql> delete from b -> where exists( -> select * -> from a -> where a.category <> 2 -> and a.b_id = b.id); ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'exists( select * from a where a.category <> 2 and a.b_id = b.id という具合でシンタックスエラーが出てしまいました。ただ、EXISTS関数がとてもヒントになりそうなので、これから自分でも調べてみます!