Немного сложно следить за тем, какие поля у вас есть, в каких таблицах, но я попробую. Проблема в том, что большинство людей думают, что вы хотите найти ответ из учебника о том, как использовать оператор IN, но вам нужно что-то более сложное.
Я думаю, что самый простой способ сделать то, что вы хотите, это:
SELECT *
FROM a2_name
WHERE EXISTS (
SELECT COUNT(DISTINCT ao_codeid) FROM ao_addrcodes
JOIN a1_addrs on a1_addrid = ao_addrid
LEFT JOIN a2_name on a2_addrid = ao_addrid
WHERE ao_codeid IN ('DJ', 'E', 'A') AND a2_addrid = ao_addrid
HAVING COUNT(DISTINCT ao_codeid) = 3
)
Или чтобы быть менее сложным и все еще делать то, что вы хотите (но я не уверен, какие поля вы хотите вернуть, просто замените a2_name.name на список всех полей, которые вы хотите вернуть, поскольку ваша схема не указана:
SELECT a2_name.name
FROM ao_addrcodes
JOIN a1_addrs on a1_addrid = ao_addrid
LEFT JOIN a2_name on a2_addrid = ao_addrid
WHERE ao_codeid IN ('DJ', 'E', 'A')
GROUP BY a2_name.name
HAVING COUNT(DISTINCT ao_codeid) = 3