#sql #sql-server-2005 #sql-server-2008
#sql #sql-server-2005 #sql-server-2008
Вопрос:
У меня есть отношение n к m в SQL, подобное этому:
Таблица A:
Id
1
2
3
Таблица B:
Id
1
2
3
Таблица отношений AB:
Id_A Id_B
1 1
1 3
2 3
Это означает, что объект в таблице A с идентификатором 1 связан с объектом в таблице B с идентификатором 1, также A: 1 с B: 3 и A: 2 с B: 3.
Теперь, чего я пытаюсь достичь, это получить все идентификаторы из таблицы A, которые не имеют отношения к B: 1. Это должно возвращать A: 2 и A: 3.
Как я могу этого добиться?
Ответ №1:
SELECT id
FROM TableA
EXCEPT
SELECT Id_A
FROM TableAB
WHERE Id_B=1
Или (Если вам нужны дополнительные столбцы из TableA, которые не показаны)
SELECT a.id /*,a.foo, a.bar*/
FROM TableA a
WHERE NOT EXISTS(SELECT *
FROM TableAB ab
WHERE ab.Id_B=1 AND ab.Id_A=a.Id)