对A列进行SQL内部联接并比较B列中的值
我相信或者希望有一个简单的方法来做到这一点。下面是我的最新尝试。查询应该只返回一行,但我得到31行 查询:对A列进行SQL内部联接并比较B列中的值,sql,sql-server,inner-join,string-matching,Sql,Sql Server,Inner Join,String Matching,我相信或者希望有一个简单的方法来做到这一点。下面是我的最新尝试。查询应该只返回一行,但我得到31行 查询: `select distinct a.[EC CERS], a.[EC Tank ID], [CIW Tank ID] from #tempectank a inner join #tempciwtank b on a.[EC CERS] = b.[CIW CERS] where a.[EC Tank ID] <> b.[CIW Tank
`select distinct a.[EC CERS], a.[EC Tank ID], [CIW Tank ID]
from #tempectank a
inner join #tempciwtank b on a.[EC CERS] = b.[CIW CERS]
where a.[EC Tank ID] <> b.[CIW Tank ID]`
表数据:
表A
欧洲共同体核证的排减量
EC油箱ID
100338
1.
100338
2.
100338
3.
如果您想要a.[EC CERS]=b.[CIW CERS]和a.[EC坦克ID]b.[CIW坦克ID]的行,请尝试以下操作:
Select a.[EC CERS], a.[EC Tank ID], b.[CIW Tank ID]
from #tempectank a
inner join #tempciwtank b
on a.[EC CERS] = b.[CIW CERS]
and a.[EC Tank ID] <> b.[CIW Tank ID]
如果是领导ziros的问题,您可以采用以下解决方案: 如果您的ID中有非数字,这将不起作用
Select a.[EC CERS], a.[EC Tank ID], b.[CIW Tank ID]
from #tempectank a
inner join #tempciwtank b
on a.[EC CERS] = b.[CIW CERS]
and a.[EC Tank ID] <> b.[CIW Tank ID]
and cast(a.[EC Tank ID] as int ) = cast(b.[CIW Tank ID] as int)
如果要并排显示不匹配的实例,则必须从两侧查找不匹配的实例:
select * from (
select * from #tempectank a
where not exists (select 1 from #tempciwtank b
where a.[EC CERS] = b.[CIW CERS]
and a.[EC Tank ID] = b.[CIW Tank ID]
)
and exists (select 1 from #tempciwtank b where a.[EC CERS] = b.[CIW CERS])
) a
join (
select * from #tempciwtank b
where not exists (select 1 from #tempectank a
where a.[EC CERS] = b.[CIW CERS]
and a.[EC Tank ID] = b.[CIW Tank ID]
)
and exists (select 1 from #tempectank a where a.[EC CERS] = b.[CIW CERS])
)b
on a.[EC CERS] = b.[CIW CERS]
请标记您的dbms。请包括表架构和预期输出您想要哪一行-获取该行的规则是什么-不清楚您期望从给定的数据和描述中得到什么。该表应在CERS ID上内部联接。我需要储罐ID不匹配的行。例如,在一种情况下,EC储罐ID为6,CIW储罐ID为WRP North。我希望返回这一行和坦克ID不匹配的任何其他行。我不认为这符合OP的要求。从技术上讲,它是按照字面意思做的,但它可能想要的是不匹配的记录,而不是所有差异的笛卡尔积。我只需要一行。@尝试编码有帮助吗?如果不是,那么您希望查询返回哪一行。我可以知道下行的原因吗?此查询返回了一行,但如果字段值是字母数字的,它会工作吗?只是尝试了对整个数据集的查询,在将varchar值“1”转换为数据类型int时收到的转换失败。不,不会。但是如果有不同的模式,你可以用另一种方法找到它们,我没有一个一致的模式。我看到整数、字母数字和文本。例如,在一个案例中,EC坦克ID为6,CIW坦克ID为WRP North。哇,太棒了。有没有办法显示CIW油箱ID?该查询按原样返回16行,但在[EC CERS]=b.[CIW CERS]上尝试内部联接tempciwtank b时返回49行
select * from (
select * from #tempectank a
where not exists (select 1 from #tempciwtank b
where a.[EC CERS] = b.[CIW CERS]
and a.[EC Tank ID] = b.[CIW Tank ID]
)
and exists (select 1 from #tempciwtank b where a.[EC CERS] = b.[CIW CERS])
) a
join (
select * from #tempciwtank b
where not exists (select 1 from #tempectank a
where a.[EC CERS] = b.[CIW CERS]
and a.[EC Tank ID] = b.[CIW Tank ID]
)
and exists (select 1 from #tempectank a where a.[EC CERS] = b.[CIW CERS])
)b
on a.[EC CERS] = b.[CIW CERS]