sql >> Databáze >  >> RDS >> Sqlserver

Chcete získat seznam všech mladších lékařů pracujících pod starším lékařem a naopak?

Něco takového by mohlo pomoci:

Nejprve několik testovacích dat:

DECLARE @DoctorInfo TABLE
                (
                    doctorId INT,
                    fistName VARCHAR(100),
                    seniorDoctorId INT
                )

INSERT INTO @DoctorInfo
VALUES
    (34,'ABC',0),
    (35,'XYZ',34),
    (36,'bsd',34),
    (37,'dfdf',35),
    (38,'dffdg',0)

Dotaz vypadá takto:

DECLARE @doctorId INT
SET @doctorId=35
;WITH CTE(doctorId,seniorDoctorId,fistName)
AS
(
    SELECT
        DoctorInfo.doctorId,
        DoctorInfo.seniorDoctorId,
        DoctorInfo.fistName
    FROM
        @DoctorInfo AS DoctorInfo
    WHERE
        [email protected]
    UNION ALL
    SELECT
        DoctorInfo.doctorId,
        DoctorInfo.seniorDoctorId,
        DoctorInfo.fistName
    FROM
        @DoctorInfo AS DoctorInfo
        JOIN CTE
            ON DoctorInfo.seniorDoctorId=CTE.doctorId
)
SELECT
    *
FROM
    CTE

Chcete-li získat požadovaný výstup, nemusíte používat seniorDoctorId protože už mají příbuzný rodič-dítě.

Viz příklad zde



  1. Rychlost stránkovaných dotazů v Oracle

  2. MYSQL náhodně vybere každou z kategorií

  3. Na Duplicate Key aktualizujte pouze hodnoty Null nebo prázdné

  4. jaký typ enginu (InnoDB nebo MyISAM) bych měl použít pro svou databázi pro web?