2010-08-04 9 views
1

Ma table (Projectlist) colonnes sont: ProjectID, MainProjectId, SecondaryProjectId, ProjectName, EndDateAide requête SQL sur la même table

Je dois écrire une requête qui me amène toutes les lignes de cette table où

EndDate < = 40394 et pour chaque projectID que je dois apporter à nouveau toutes les lignes où

(MainProjectId = projectID) OR (SecondaryProjectId = projectID)

Exemple:

1, 0, 0, "project1", 54789

2, 1, 0, "Project2", 54789

3, 1, 2, "project3", 40393

La requête devrait retourner toutes les 3 lignes (le troisième remplit la condition de la date et les 2 autres lignes remplit la condition où elles sont dans MainProjectId et SecondaryProjectId de project3)

Merci.

+0

Connaissez-vous le numéro de projet que vous cherchez? –

+0

Non, je dois obtenir tous les projectIds (et quelques autres détails) que cette requête apporte Après le filtrage par EndDate, les résultats de cela devraient être de nouveau interrogés afin d'obtenir les autres lignes – Shay

Répondre

2

Je suppose que cela est ce que vous cherchez -

select * from ProjectList where EndDate <= 40394 or 
    mainProjectID in (
    select mainProjectID from projectList where EndDate <= 40394 
    ) or secondaryProjectID in (
    select secondaryProjectID from projectList where EndDate <= 40394 
    ) 
+0

Ce n'est pas tout à fait exact, parce que si un projet n'a pas alors principal/secondaire, les valeurs sont 0, cette requête me amène tout, mais les mainProjects – Shay

+0

Considérez ce tableau: 1, 0, 0, "Projet1", 40393 2, 0, 0, "Project2", 54789 3, 2, 0, "project3", 40393 4, 2, 0, "project4", 54789 5, 2, 4, "projet5", 40393 La requête manque project2. – Shay

+0

Vous ne savez pas pourquoi Project2 manquerait dans ce cas. Le principalProjectID de Project2 correspond à Project1 dont la date de fin est inférieure à 40394. Par conséquent, j'ai toujours project2 dans mes résultats. Notez la condition OU. –