2

我正在尝试为我的程序编写一个 SQL 查询,但我就是不知道怎么做。我不知道足够的SQL。

我正在尝试实施一个在线团队系统(对于某些网站)。我有两张桌子:

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

现在,我需要:删除teammembers对应的 eventId 为teamId1 的所有记录。

我正在努力:

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 回答