Member 14800672 Ответов: 1

Как сделать логическое поле на основе условия


У меня есть этот стол

Id  ParentId
1     0
2     0
3     0
4     3
5     3
6     2


я хочу создать хранимую процедуру, которая извлекает идентификаторы на основе входных данных родителя, а также должна получить новое поле, возвращающее true или false, если идентификатор имеет другие идентификаторы, которые рассматривают его как родителя. Я имею в виду вот что

если входные данные для моей хранимой процедуры равны 0, то результат должен быть:
Id ParentId hasId
1    0      0 it's false cause there is no Id in table considers Id 1 as a parent
2    0      1  it's true because Id =6 considers  Id 2 as a parent
3    0      1  it's true because Id =4 and 5 considers Id 3 as a parent


Что я уже пробовал:

CREATEPROCEDURE [dbo].[GetIds]
	@ParentId int

  AS

  SELECT 
		Table.Id 
	       ,Table.ParentId

  FROM		Table

WHERE	 Table.ParentId = @ParentId 

RETURN 0


Как сделать хасидскую логику?

1 Ответов

Рейтинг:
5

MadMyche

Что вам нужно сделать, так это снова соединить стол с самим собой.

Поиграйте с этим образцом

DECLARE @Table TABLE (ID INT, ParentID INT)
INSERT @Table VALUES (1, 0), (2, 0), (3, 0), (4, 3), (5, 3), (6, 2)

DECLARE @ParentID INT = 0

SELECT    p.ID, p.ParentID, Matches = case count(c.ID) when 0 then 0 else 1 end
FROM      @Table P
FULL JOIN @Table c on p.id = c.parentID
WHERE     p.ParentID = @ParentID
GROUP BY  p.ID, p.ParentID


Member 14800672

Большое вам спасибо, я попробовал левое соединение вместо полного соединения, и это тоже сработало. Что лучше, и вы использовали полное соединение по какой-то причине?

MadMyche

Left Join также будет работать; полный вариант остался от более ранней версии этого приложения

Maciej Los

5ed!

MadMyche

Спасибо