Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对A列进行SQL内部联接并比较B列中的值_Sql_Sql Server_Inner Join_String Matching - Fatal编程技术网

对A列进行SQL内部联接并比较B列中的值

对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

我相信或者希望有一个简单的方法来做到这一点。下面是我的最新尝试。查询应该只返回一行,但我得到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 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]