Inner join NOT working - numeric fields

I am trying to do an inner join in an open query (Oracle) where both join fields are numeric, but it returns zero results when I can see that there are matches between the two tables.


One table has almost 1 million records and the other has only 678. I'd hate to use a left outer join as it takes too long and gives me unwanted records/results.

"inner join on isnumeric(b.EMPL_NO) = isnumeric(a.emplid)"

How can I solve this?
Thanks
saved4useAsked:
Who is Participating?
 
saved4useConnect With a Mentor Author Commented:
I ended up dumping the query results into two tables, exporting the content to Excel and converting from text to number and working with them that way. It appears I was trying to join '00000518903' to '518903'
Nevertheless, thanks.
0
 
SharathData EngineerCommented:
Without looking into the data, it's hard to tell what's wrong. If they are numeric, why do you want to apply isnumeric again?
0
 
saved4useAuthor Commented:
Because the open query would not even run without isnumeric before the two fields.
0
Cloud Class® Course: Amazon Web Services - Basic

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

 
JesterTooCommented:
Are you certain that you are querying an Oracle database?  To the best of my knowledge, Oracle does not have an "isnumeric" function.  And if it did, this type of usage would be returning, and comparing, two boolean values.

I'm guessing that the actual datatypes of the two table fields is one of the various "char" types.  If so, you could use the "to_number" function to convert them from character to numeric.
0
 
Vitor MontalvãoMSSQL Senior EngineerCommented:
It shouldn't be
"inner join on b.EMPL_NO = a.emplid" ?

What for do you need the isnumeric function?
0
 
saved4useAuthor Commented:
@JesterToo: I'm using an Oracle open query through SQL server.

@Vitor: I tried your suggestion above and it does not work/does not return results.

I even used this on the Oracle db and I get null in the results:

select

LENGTH(TRIM(TRANSLATE(EMPL_NO, ' +-.0123456789', '')))

from IBDD

where

LENGTH(TRIM(TRANSLATE(EMPL_NO, ' +-.0123456789', ''))) is null
0
 
awking00Commented:
You cannot use an empty string for the to_string parameter of the translate function. You might try the following -
WHERE REPLACE(REGEXP_REPLACE(EMPL_NO,'[0-9\. +-]',''x'),'x','') IS NULL
Note - I used 'x' but it can be any character that will never show up in empl_no.
0
 
PortletPaulfreelancerCommented:
Could you provide a few values of each please? E.g.

Select top (10) b.EMPL_NO from b
Select top (10) a.emplid from a

Just a few of each should be enough
0
 
PortletPaulfreelancerCommented:
next time try something like these:

'00000518903' to 518903 (joining padded string to integer)

e.g.
inner join on b.EMPL_NO = RIGHT('00000000000' + cast(a.emplid as varchar(11)),11)

=====================
'00000518903' to '518903' (if joining padded string to string)

e.g.
inner join on b.EMPL_NO = RIGHT('00000000000' + a.emplid,11)

================

swap the columns names as needed (wasn't sure which one is zero padded)

=================
{+ edit}

it IS possible to work the other way (to convert the strings to numbers) BUT it might produce conversion error. However you could try these:


inner join on try_cast(b.EMPL_NO as integer) = a.emplid --<< try_cast() requires SQL Server 2012 or later

inner join on cast(b.EMPL_NO as integer) = a.emplid
0
 
Vitor MontalvãoMSSQL Senior EngineerCommented:
It appears I was trying to join '00000518903' to '518903'
Oh, now I think I understand the isnumeric(b.EMPL_NO) = isnumeric(a.emplid)

You should use CAST function to convert both fields to integer and to assure that those strings are valid number then use the ISNUMERIC function in the WHERE clause:
SELECT *
FROM Table1 a
    INNER JOIN Table2 b ON CAST(b.EMPL_NO AS INT) = CAST(a.emplid AS INT)
WHERE ISNUMERIC(b.EMPL_NO) = 1 AND ISNUMERIC(a.emplid) = 1

Open in new window

0
 
saved4useAuthor Commented:
No other reasonable answer worked.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.