MS SQL: Как выделить записи, у которых нет дочерних элементов в одной таблице? - PullRequest
0 голосов
/ 26 ноября 2009

У меня каверзная проблема. У меня очень сложное представление в MS SQL 2005 со следующим результатом:

|  ID  |   Name   |  ParentID  |
--------------------------------
|  1   |   Cars   |     1      |
|  2   |   Audi   |     1      |
|  3   |  Toyota  |     1      |
|  4   |  Trucks  |     4      |

Теперь я хочу, чтобы мой взгляд признал, что запись с идентификатором 4 не имеет дочерних элементов, и, следовательно, выделил ее.

Есть идеи? ;)

Спасибо
Торбена

Ответы [ 4 ]

2 голосов
/ 26 ноября 2009

Поскольку ParentID = ID для родительских строк, вы хотите найти те, в которых есть только один экземпляр данного ParentID:

SELECT
   ParentID
FROM
   myTable
GROUP BY
   ParentID
HAVING
   COUNT(1) = 1
1 голос
/ 26 ноября 2009

Это были бы те, у которых нет детей:

SELECT a.*
FROM theView a
    LEFT JOIN theView b ON (a.a = b.ParentId AND b.Id <> b.ParentId)
WHERE b.Id IS NULL

Однако ID 2 и ID 3 также не имеют детей.

1 голос
/ 26 ноября 2009
WHERE ParentID NOT IN (SELECT     ParentID 
                 FROM       TABLE 
                 WHERE      ParentID <> ID)
0 голосов
/ 26 ноября 2009
SELECT *
FROM Table as parent
WHERE EXISTS (
  SELECT child.ParentID 
  FROM   Table as child
  WHERE  parent.ParentId = child.id
    and parent.id != child.id
)

Если строки без родителя всегда ссылаются на себя, это просто:

SELECT *
FROM Table as parent
WHERE parent.parentId != parent.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...