2017-05-01 6 views
0

J'ai deux tables, la première table est la table primaire appelée Projet, le projet a un ID et une unité que je cherche. La deuxième table est une table de pont appelée Project_ChecklistItems. Cette table jette un pont entre Project et ChecklistItems. ChecklistItems ont un Project.ID auquel ils appartiennent, un nom et un statut pour ce Project.ID.Comment puis-je interroger une table avec une relation un à plusieurs avec une autre table en utilisant plusieurs paramètres?

Je dois effectuer une recherche par unité et état de la liste de contrôle.

Je considère une instruction innerjoin avec plusieurs instructions where.

`SELECT * 
FROM dbo.Project 
INNER JOIN dbo.Project_ChecklistItem 
ON dbo.Project.ID = dbo.Project_ChecklistItem.ProjectID 
WHERE dbo.Project.Unit = 'Industrial' 
OR dbo.ECN.Division = 'Automotive' 
OR dbo.Project.Unit = 'SwivelChair' 
And dbo.Project_ChecklistItem.Status = 'Yes'' 

|Project ID | Unit | |ProjctID|ChecklistItemName|Status| 
| 105  | automotive | |105  | ASO   | No | 
|   |   | |105  | PR   | Yes | 
|   |   | |105  | SOP   | Yes | 

Le problème est que je dois être en mesure de rechercher par un nom Checklist_Item spécifique, ou tous les noms Checklist_Item.

+1

Votre question n'a pas de sens. Vous ne mentionnez que deux tableaux dans la question, mais il y en a au moins trois dans l'exemple de code. Des exemples de données et les résultats souhaités seraient très utiles. –

+1

Et vos prédicats où vous semblez être problématique. Vous avez des OR et ANDs là mais pas de parenthèse. –

+1

Modifié la description du problème et ajouté un modèle de table. –

Répondre

0

Vous avez des problèmes avec la clause where

Première - dbo.ECN.Division ne peut pas être utilisé dans la clause Where car il est pas dans la clause. Pour le reste, je suppose qu'il devrait vraiment être Project.Unit

Si vous mélangez des clauses (AND et OR) dans votre clause Where sans utiliser de parenthèses, vous finirez presque toujours par quelque chose que vous n'aviez pas prévu. Je suppose que ce que vous voulez vraiment, c'est tous les dossiers où le Project.Unit est l'un des (Industrial, Automotive, Swivelchair) et le statut est oui, mais vous avez tous les enregistrements qui correspondent à l'un des suivants (industriel - statut non pertinent), (Automobile - statut non pertinent) ou (Pivot et statut doit être oui).

Essayez l'une des clauses suivantes où

WHERE 
(dbo.Project.Unit = 'Industrial' 
    OR dbo.Project.Unit = 'Automotive' 
    OR dbo.Project.Unit = 'SwivelChair' 
) 
And dbo.Project_ChecklistItem.Status = 'Yes' 

OU

WHERE dbo.Project.Unit IN ('Industrial', 'Automotive', 'SwivelChair') 
And dbo.Project_ChecklistItem.Status = 'Yes'