Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zdobądź członków rodziny

Rozwiązanie, które znalazłem, wcale nie jest dobre. Daje właściwą odpowiedź, ale jest bardzo powolny, nawet dla tego bardzo małego stołu.

 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

Skrzypce SQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować listę liczb na (tymczasową) tabelę za pomocą SQL (SQL Server)

  2. 7 sposobów na zwrócenie wszystkich tabel z kluczem podstawowym w SQL Server

  3. SQL Server - Jednoczesne wstawianie do tabeli od wielu klientów - Sprawdź limit i blokuj

  4. Czy lepiej wykonywać wiele poleceń sql przy jednym połączeniu, czy łączyć się ponownie za każdym razem?

  5. Jak określić liczbę dni w miesiącu w SQL Server?