プロが教えるわが家の防犯対策術!

下記のテーブルがある。idはintで、mailはtext
+------+--------------------------------------+
| id | mail |
+------+--------------------------------------+
| 1 | 最初のinsert into の実験 |
| 2 | 上手く行ったが、こんなもんでは無い。 |
| 3 | 途中からだが、上手く行くのか。 |
| 4 | 今度はもうバッチリ見たいだ。 |
| 5 | end_of_record |
| 6 | これが最後のテストデータです。 |
| 7 | 始めて、途中でエラーが出たが。 |
| 8 | 何か知らんが、2回目でエラーになる。 |
| 9 | ここで動かない理由は何なんだ。 |
| 10 | ここは気にせずに前を向いて歩こう。 |
| 11 | end_of_record |
+------+--------------------------------------+


これは、
select *
from work
where id<=
(
select min(id)
from work
where
mail = "end_of_record"
)
;
上記を実行すると下記が得られる。
+------+--------------------------------------+
| id | mail |
+------+--------------------------------------+
| 1 | 最初のinsert into の実験 |
| 2 | 上手く行ったが、こんなもんでは無い。 |
| 3 | 途中からだが、上手く行くのか。 |
| 4 | 今度はもうバッチリ見たいだ。 |
| 5 | end_of_record |
+------+--------------------------------------+

では、これをdeleteで実行しようとすると、サブクエリーでは同一の
テーブルが使えないと言うエラーが出る。
delete from work
select *
from work
where id<=
(
select min(id)
from work
where
mail = "end_of_record"
)
;

別名を使った、deleteのsqlを教えて下さい。
宜しく、お願いします。

A 回答 (1件)

delete from work


where id<=
(select * from (
select min(id)
from work
where
mail = "end_of_record"
)as sub)
;
    • good
    • 0
この回答へのお礼

有難う御座います。
これは、素人では最初は難しいのかも。

最初は分からないのでここでは別のテーブルを使って
inner joinでやった方が分かり易くて良いのかなあと思っています。

折角回答を戴いて申し訳ありませんでしたが。
参考になりました。
こう言う方ほが有るのですね。
大変勉強になりました。

お礼日時:2016/01/18 23:24

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

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


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