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