如何使用多个参数查询与另一个表具有一对多关系的表?

时间:2017-05-01 20:46:25

标签: sql-server bridge

我有两个表,第一个表是名为Project的主表,项目有一个ID和一个我正在搜索的单元。第二个表是名为Project_ChecklistItems的桥表。此表将Project连接到ChecklistItems。 ChecklistItems具有它们所属的Project.ID,该Project.ID的名称和状态。

我需要按单位和核对清单状态进行搜索。

我正在考虑一个带有多个where语句的innerjoin语句。

`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 | 

问题是我需要能够通过一个特定的Checklist_Item名称或所有Checklist_Item名称进行搜索。

1 个答案:

答案 0 :(得分:0)

你遇到了where子句

的问题

首先 - dbo.ECN.Division不能在Where子句中使用,因为它不在From子句中。对于其余部分,我假设它应该是Project.Unit

如果你在Where子句中混合使用条款(ANDs和OR)而不使用括号,你几乎总会得到你不想要的东西。我假设你真正想要的是所有记录,其中Project.Unit是(工业,汽车,转椅)之一,状态是肯定的,但你所拥有的所有记录都符合下列之一(工业 - 状态不相关的),(汽车 - 状态无关)或(转椅和状态必须是)。

尝试以下任何一个子句

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

OR

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