Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вземете членове на семейството

Решението, което намерих, не е никак добро. Той дава правилния отговор, но е много бавен, дори за тази много малка таблица.

 DECLARE @INCLUIDOS TABLE (ID INT)

 INSERT INTO @INCLUIDOS VALUES(1)

 DECLARE @PAST_QUANT INT = 0
 DECLARE @QUANT INT = 1 

 WHILE @QUANT <> @PAST_QUANT
 BEGIN

     SET @PAST_QUANT = @QUANT

     INSERT INTO @INCLUIDOS
        SELECT PARENT 
        FROM PERSONCONN 
        WHERE CHILD IN (SELECT ID FROM @INCLUIDOS)
            AND PARENT NOT IN (SELECT ID FROM @INCLUIDOS)

    INSERT INTO @INCLUIDOS
        SELECT CHILD
        FROM PERSONCONN
        WHERE PARENT IN (SELECT ID FROM @INCLUIDOS)
            AND CHILD NOT IN (SELECT ID FROM @INCLUIDOS)

    SET @QUANT = (SELECT COUNT(*) FROM @INCLUIDOS)

END

SELECT DISTINCT ID FROM @INCLUIDOS

SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да коригирате „името на профила не е валидно“ при актуализиране на пощенски профил на база данни в SQL Server (T-SQL)

  2. Най-лесният начин за попълване на временна таблица с дати между и включително 2 параметъра за дата

  3. SQL заявка, която получава всички пощенски кодове (адреси) в радиус от 20 мили от даден пощенски код

  4. Индекс на SQL Server Кое трябва да бъде групирано?

  5. Как да използвам DELETE с клауза EXCEPT?