Какой элемент SQL не содержит отношения n2m с X

#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)