Как вернуть записи по другому идентификатору столбца из той же таблицы?

#mysql #sql

Вопрос:

Герои 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)
 

Комментарии:

1. Ожидается, что подзапрос вернет только один столбец, который будет сравниваться с идентификатором.

Ответ №1:

Вы на правильном пути, вам просто нужно выбрать правильный столбец в подзапросе:

 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 все в порядке.