【问题标题】:How can I query a table with a one to many relationship with another table using multiple parameters?如何使用多个参数查询与另一个表具有一对多关系的表?
【发布时间】:2017-05-01 20:46:24
【问题描述】:

我有两个表,第一个表是名为 Project 的主表,该项目有一个 ID 和一个我正在搜索的 Unit。第二个表是名为 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 名称进行搜索。

【问题讨论】:

  • 你的问题没有意义。您在问题中只提到了两个表,但示例代码中至少有三个。样本数据和期望的结果会很有帮助。
  • 你的 where 谓词似乎有问题。里面有 OR 和 AND,但没有括号。
  • 修改问题描述,增加表格模型。

标签: sql-server bridge


【解决方案1】:

您对 where 子句有疑问

First - dbo.ECN.Division 不能在 Where 子句中使用,因为它不在 From 子句中。对于剩下的部分,我假设它真的应该是 Project.Unit

如果您在 Where 子句中混合使用子句(AND 和 OR)而不使用方括号,那么您几乎总是会得到您不想要的结果。我假设您真正想要的是所有记录,其中 Project.Unit 是其中之一(工业、汽车、旋转椅)并且状态为是,但是您所拥有的所有记录都与以下之一匹配(工业 - 状态无关)、(汽车 - 状态无关)或(转椅和状态必须为是)。

尝试以下任一 where 子句

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

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

【讨论】:

    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多