sql - My INNER JOIN is filtering out too much -


my inner join filtering out or can't see difference is.

i trying consolidate 2 tables 2 different databases on same server.

my first step find values match:

select intl.*   tbldata intl inner join [db].dbo.tbldata on     intl.dataid = us.dataid ,    intl.anotherid = us.anotherid ,    intl.datavalue = us.datavalue ,    intl.textvalue = us.textvalue ,    intl.defaultvalue = us.defaultvalue ,    intl.ratevalue = us.ratevalue ,    intl.yetanotherid = us.yetanotherid 

i've checked columns , same type , same varchar values. query should bring matching values.

however... not case. returning 200+ records, if run query after insert 200+ records temp table:

select intl.dataid   tbldata intl left join tempdatatable tdt on     tdt.dataid = intl.dataid ,    tdt.anotherid = intl.anotherid ,    tdt.datavalue = intl.datavalue ,    tdt.textvalue = intl.textvalue ,    tdt.defaultvalue = intl.defaultvalue ,    tdt.ratevalue = intl.ratevalue ,    tdt.yetanotherid = intl.yetanotherid  tdt.dataid null 

this query returns 1500+ rows.

i've run similar query data , found same discrepancy (1500+ rows returned).

i looked @ 1 record see if identify whacky, , found records each table (intl , us) same!

 dataid: 1  anotherid: 1  datavalue: null  textvalue: normal  defaultvalue: 0  ratevalue: null  yetanotherid: 1 

i imagine inner join finding difference between 2 tables structurally can not see it.

any ideas on cause this?

this caused null values have in table failing equality checks of left join.

null values aren't equal anything, not null of same datatype.

to remedy this, can add check on clause null values on both sides in addition existing join conditions:

select intl.dataid   tbldata intl left join tempdatatable tdt     on  (             (tdt.dataid null , intl.dataid null)                         or tdt.dataid = intl.dataid         )     , (             (tdt.anotherid null , intl.anotherid null)                   or tdt.anotherid = intl.anotherid         )     , (             (tdt.datavalue null , intl.datavalue null)                   or tdt.datavalue = intl.datavalue         )     , (             (tdt.textvalue null , intl.textvalue null)                   or tdt.textvalue = intl.textvalue         )     , (             (tdt.defaultvalue null , intl.defaultvalue null)              or tdt.defaultvalue = intl.defaultvalue         )     , (             (tdt.ratevalue null , intl.ratevalue null)              or tdt.ratevalue = intl.ratevalue         )     , (             (tdt.yetanotherid null , intl.yetanotherid null)              or tdt.yetanotherid = intl.yetanotherid         )  tdt.dataid null 

Comments

Popular posts from this blog

javascript - Slick Slider width recalculation -

jsf - PrimeFaces Datatable - What is f:facet actually doing? -

angular2 services - Angular 2 RC 4 Http post not firing -