2

プログラム用の SQL クエリを作成しようとしていますが、方法がわかりません。私は十分なSQLを知りません。

オンライン チーム システムを実装しようとしています (一部の Web サイト用)。私は2つのテーブルを持っています:

teams | teamId, eventId
teammembers | teamId, userId, status

teammembersここで、対応するイベント IDが 1 であるすべてのレコードを削除する必要がありteamIdます。

私はしようとしています:

delete from teammembers where teamId=teams.teamId and teams.eventId=1;

これが本当に私がやろうとしていることをしているのかどうかはわかりません。

このクエリは間違っていますか?もしそうなら (おそらくそうです)、どうすればそのようなクエリを書くことができますか?

4

6 に答える 6

12

RDBMS を指定しないので、ここでは MySQL にあります

DELETE teammembers FROM teammembers
JOIN teams on teammembers.teamId = teams.teamId
WHERE teams.eventId = 1
于 2010-01-14T21:43:46.723 に答える
6

これは、SQL Serverで行うことです

DELETE tm 
--select tm.*
FROM teammembers tm
JOIN teams t on tm.teamId = t.teamId 
WHERE t.eventId = 1 

選択をコメントに埋め込むことで、開発中に削除を実行する前に、この部分だけを手動で実行して、影響を受けるレコードを確認できます。

select tm.*
FROM teammembers tm
JOIN teams t on tm.teamId = t.teamId 
WHERE t.eventId = 1 

削除しようと考えているレコードが、削除しようとしていたレコードであるかどうかを確認せずに、初めて削除ステートメントを実行することはありません。このチェックにより、より複雑な削除が、影響を与えたいレコードだけに影響を与えているかどうかについて、多くの心配をする必要がなくなります。

于 2010-01-14T22:02:03.657 に答える
4

サブクエリまたは結合を行う必要があります。結合の方が速いと思います。

delete from teammembers
join teams on teammembers.teamid = teams.teamid
where teams.eventid = 1
于 2010-01-14T21:44:06.910 に答える
3

複数テーブルの削除構文を使用する必要があります。

DELETE teammembers
FROM teammembers
JOIN teams ON teamId=teams.teamId 
WHERE teams.eventId=1;

(ここではMySQLを想定しています)

于 2010-01-14T21:44:18.793 に答える
1
delete from teammembers where teamid in 
(
  select teamid from teams where eventid = 1
)

teamid が結合列であると仮定します。

于 2010-01-14T21:43:18.577 に答える
0

これはあなたが望むものです:

delete from teammembers where teamId in (select teamId from teams where eventId=1);

編集:いくつかのコメントが既に示唆しているように、より効率的な方法は実際に結合を使用することです:

delete from teammebers
join teams on teams.teamId = teammembers.teamId
where eventId = 1
于 2010-01-14T21:44:11.137 に答える