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)
Тут фиддл