Sql server SQL Server,包含多个where语句的内部联接

Sql server SQL Server,包含多个where语句的内部联接,sql-server,join,Sql Server,Join,我在设置以下查询时遇到困难: 在MATERIALSCOSTACT表中查找具有两个特定Material值之一的所有WORKORDER值 然后,从WORKORDER表中,我想用“main replace”或“install”描述删除所有值,然后我想确保我只查看water或Newer ASSETGROUP。我想确保我只查看自今年第一年以来发生的女同性恋记录 我想将MaterialCostAct表和WORKORDER表内部联接到它们的共享WORKORDERID列中 我不知道如何将第一条语句与第二条语句连

我在设置以下查询时遇到困难:

在MATERIALSCOSTACT表中查找具有两个特定Material值之一的所有WORKORDER值

然后,从WORKORDER表中,我想用“main replace”或“install”描述删除所有值,然后我想确保我只查看water或Newer ASSETGROUP。我想确保我只查看自今年第一年以来发生的女同性恋记录

我想将MaterialCostAct表和WORKORDER表内部联接到它们的共享WORKORDERID列中

我不知道如何将第一条语句与第二条语句连接起来,在第二条语句中,SQL Server在“INNER”上给了我一个语法错误


非常感谢任何能帮忙的人

你只是把where子句放错地方了。它需要在连接之后出现

Select * from [CityWorks].[AZTECA].[WORKORDER] 
INNER JOIN workorderid on [CityWorks].[AZTECA].[materialcostact].[workorderid] =
[CityWorks].[AZTECA].[WORKORDER].[workorderid] 
where description not like '%main replace%' and description not like '%install%'
and (assetgroup = 'WATER' or Assetgroup = 'SEWER') 
and womatcost != 0
and ACTUALSTARTDATE > '2013-12-31 00:00:00.000'
group by assetgroup

如果这些列出现在多个表中,您可能需要为表添加别名,或者在where子句中更加明确。

我相信这就是您想要的:

注意:尽量使用别名,它们使代码更容易阅读

Select * 
from [CityWorks].[AZTECA].[WORKORDER] WO
JOIN [CityWorks].[AZTECA].[materialcostact] MC 
   on WO.[workorderid] = MC.[workorderid] 
   and (MC.materialsid = 30791 or MC.materialsid = 30841)
where description not like '%main replace%' and description not like '%install%'
and (assetgroup = 'WATER' or Assetgroup = 'SEWER') 
and womatcost != 0
and ACTUALSTARTDATE >= '2014-01-01'

谢谢你们两位!JiggsJedi你的提问很有效
Select * 
from [CityWorks].[AZTECA].[WORKORDER] WO
JOIN [CityWorks].[AZTECA].[materialcostact] MC 
   on WO.[workorderid] = MC.[workorderid] 
   and (MC.materialsid = 30791 or MC.materialsid = 30841)
where description not like '%main replace%' and description not like '%install%'
and (assetgroup = 'WATER' or Assetgroup = 'SEWER') 
and womatcost != 0
and ACTUALSTARTDATE >= '2014-01-01'