2010-12-02 4 views
0

J'ai trois tables, je veux sélectionner deux colonnes de la première table et un de la dernière table à afficher dans un gridview pour asp.netrequêtes SQL Problème avec trois tables

J'ai Table Sprint, Task et Bloqué.

Je veux afficher CurrentStatus à partir de la table bloquée et pour ce faire j'ai besoin d'utiliser la table des tâches pour les joindre ensemble. J'ai tenté la requête ci-dessous, mais cela ne fonctionne pas.

Quelqu'un peut-il m'aider s'il vous plaît, ce serait apprécié.

Merci

+4

@Karl. S'il vous plaît expliquer "ne fonctionne pas". – jordanbtucker

+0

Commencez par commencer par la table tblBlocked (c'est-à-dire, FROM tblBlocked ...) plutôt que de la joindre, puis utilisez simplement les jointures internes pour les autres tables. (En supposant que vous voulez seulement voir les enregistrements bloqués de toute façon.) –

+1

Et aussi - votre essayant de faire une INNER JOIN sur un LEFT JOIN, ce qui n'a pas de sens. L'INNER JOIN devrait être le premier, et le LJ off, ou ils devraient tous les deux être LJ. – RPM1984

Répondre

1

La façon dont vous faites maintenant, vous faites

  • premier LEFT JOIN sur la tâche (qui maintient les entrées Sprint sans tâche) et
  • alors un INNER JOIN sur Blocked (qui supprime les entrées Sprint qui n'ont pas d'entrée bloquée).

Fondamentalement, vous devez INNER JOIN Tâche et Bloqué d'abord, puis RIGHT JOIN à Sprint (qui obtient tous les sprints):

SELECT tblSprint.sprintID, tblSprint.projectID, tblBlocked.CurrentStatus 
FROM tblTask 
    INNER JOIN tblBlocked ON tblTask.taskID = tblBlocked.taskID 
    RIGHT JOIN tblSprint ON tblTask.sprintID = tblSprint.sprintID 

Sinon, si cela est plus facile à comprendre pour vous, vous peut l'écrire comme ceci: Vous avez quitté Sprint Sprint au déjà combiné Données bloquées par une tâche.

SELECT tblSprint.sprintID, tblSprint.projectID, tblBlocked.CurrentStatus 
FROM tblSprint LEFT JOIN (tblTask INNER JOIN tblBlocked 
          ON tblTask.taskID = tblBlocked.taskID) 
    ON tblSprint.sprintID = tblTask.sprintID 
+0

Ça marche aussi! – jordanbtucker

+0

@Jordan: Oui. Et comme aucun champ de 'tblTask' n'est sélectionné, je prétends que nos deux solutions retourneront toujours le même ensemble de résultats. – Heinzi

0

Bien RPM a raison. Je viens de le tester, et vous avez besoin de deux LEFT JOIN s.

+1

Il suffit de lire votre commentaire, maintenant votre réponse. Je suppose que j'avais raison, lol. :) – RPM1984

0

Je pense que je suis juste montrer ce que RPM1984 et la Jordanie disent ici et je pense qu'ils sont corrects:

Essayez ceci:

SELECT tblSprint.sprintID, tblSprint.projectID, tblBlocked.CurrentStatus 
FROM tblSprint 
    LEFT JOIN tblTask ON tblSprint.sprintID = tblTask.sprintID 
    LEFT JOIN tblBlocked ON tblBlocked.taskID = tblTask.taskID