SQL. Отношение many-to-many. Найти все записи имеющие одну свзяь

Доброго времени суток.

Имеются две таблицы: TableA и TableB. Между этими таблицами установлено отношение many-to-many (это отношение хранится в таблице TableAtoB(idA, idB)). Как найти все записи из таблицы TableB, которые связаны с заданной записью в таблице TableA и при этом не имеют связи НИ С КАКОЙ ДРУГОЙ записью в таблице TableA? Запись из таблицы TableA задается по id.


Ответы (4 шт):

Автор решения: CrazyElf

Собственно, обращение к таблице TableA при этом и не нужно:

select * from TableB
left join TableAtoB on TableAtoB.idB = TableB.id
where TableAtoB.idA = <этот ваш id>
→ Ссылка
Автор решения: Miron
SELECT 
    TableB.* 
FROM 
    TableB 
JOIN 
    TableAToB 
ON 
    TableAToB.idA = yourAID 
    AND 
    TableB.id = TableAToB.idB;
→ Ссылка
Автор решения: Bakuard

Удалось найти только решение "в лоб"

SELECT TableAToB.idB 
   FROM TableAToB 
   WHERE TableAToB.idA = ? AND 
         TableAToB.idB IN (SELECT TableAToB.idB 
            FROM TableAToB 
            GROUP BY TableAToB.idB
            HAVING COUNT(TableAToB.idB) = 1);
→ Ссылка
Автор решения: Novitskiy Denis

Вариант с exists

select * from AtoB ab
where Aid=1 and not exists (select * from AtoB ab2
where ab2.Aid<>1 and ab2.bid=ab.Bid)

Тут фиддл

→ Ссылка