如何从同一个表中按另一列id返回记录



T1英雄

ID    NAME FRIEND
001   TOM  NULL
002   JEK  NULL
003   MAX  001
004   JIZ  NULL
005   ZAK  002

如何返回所有好友?

结果应该是:

001 TOM NULL
002 JEK NULL

我试过这个:

SELECT *
FROM Heroes
WHERE ID in ( SELECT * FROM Heroes WHERE ID IS NOT NULL)

您正走在正确的轨道上,只需要在子查询中选择正确的列:

SELECT h.*
FROM Heroes h
WHERE h.ID IN (SELECT h2.friend FROM Heroes h2);

为此,我更喜欢EXISTS

SELECT h.*
FROM Heroes h
WHERE EXISTS (SELECT h2.friend FROM Heroes h2 WHERE h2.friend = h.ID);

这通常具有更好的性能。但是IN是好的。

最新更新