Solved

3 table INNER JOIN

Posted on 2009-07-06
14
387 Views
Last Modified: 2012-05-07
I am trying to modify my query to get results from all three tables. However I cannot get the same results.

Old Query :
SELECT * FROM oc_SDN WHERE Ent_Num IN
                   (
            SELECT Ent_Num FROM oc_SDN A INNER JOIN FiPort.dbo.[oc_SearchNames] B
            ON A.SDN_Name LIKE B.Names + '%'
                    )
OR Ent_Num IN (
            SELECT Ent_Num FROM oc_Aliases A INNER JOIN FiPort.dbo.[oc_SearchNames] B
            ON A.Alt_Name LIKE B.Names + '%'
                    )
                    
                    
New:
      
      SELECT B.Ent_Num,A.Names,A.Address,A.City,A.State,B.*,A.NameId FROM [oc_SearchNames] A
      INNER JOIN oc_SDN  B ON B.SDN_Name LIKE '%' + A.Names + '%'
       LEFT OUTER JOIN oc_Aliases  C ON C.Alt_Name LIKE '%' + A.Names + '%'
0
Comment
Question by:byte1
  • 8
  • 6
14 Comments
 
LVL 41

Expert Comment

by:ralmada
Comment Utility
What about like this?
select * from OC_SDN a

inner join Fiport.dbo.[oc_searchnames] b on a.Ent_Num = b.Ent_num

where a.SDN_Name like b.Names + '%' or

a.Alt_Name like b.Names + '%'

Open in new window

0
 
LVL 41

Expert Comment

by:ralmada
Comment Utility
sorry like this:
select * from OC_SDN a

inner join Fiport.dbo.[oc_searchnames] b on a.Ent_Num = b.Ent_num

inner join Fiport.dbo.[oc_Aliases] c on a.Ent_Num = c.Ent_num

where a.SDN_Name like b.Names + '%' or

c.Alt_Name like b.Names + '%'

Open in new window

0
 

Author Comment

by:byte1
Comment Utility
OC_SDN has Ent_Num,SDN_Name,
Aliases has Ent_Num,AltName
oc_searchnames has only Names

I dont have Ent_Num on all three tables. searchNAmes has to find matches on both tables and also return its own data.
0
 
LVL 41

Expert Comment

by:ralmada
Comment Utility
And if you want to include all records from OC_SDN no matter if there is any matching with oc_Aliases, then use the left join like this:
select a.* from OC_SDN a

inner join Fiport.dbo.[oc_searchnames] b on a.Ent_Num = b.Ent_num 

left join oc_Aliases c on a.Ent_Num = c.Ent_num

where a.SDN_Name like b.Names + '%' or

c.Alt_Name like b.Names + '%'

Open in new window

0
 
LVL 41

Expert Comment

by:ralmada
Comment Utility
What about like this then?


select * from OC_SDN a

inner join oc_Aliases b on a.Ent_num = b.Ent_num

inner join oc_searchnames c on a.SDN_Name = c.Names

where a.SDN_Name like c.Names + '%' or

b.Alt_Name like c.Names + '%'

Open in new window

0
 

Author Comment

by:byte1
Comment Utility
No that didnt help either, its same as my new query.
0
 
LVL 41

Expert Comment

by:ralmada
Comment Utility
Actually like this:
select * from OC_SDN a

inner join oc_Aliases b on a.Ent_num = b.Ent_num and 

inner join Fiport.dbo.[oc_searchnames] c on a.SDN_Name like c.Names + '%'

where a.SDN_Name like c.Names + '%'

Open in new window

0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 41

Expert Comment

by:ralmada
Comment Utility
I meant
select * from OC_SDN a

inner join oc_Aliases b on a.Ent_num = b.Ent_num and 

inner join oc_searchnames c on a.SDN_Name like c.Names + '%'

where b.Alt_Name like c.Names + '%'

Open in new window

0
 

Author Comment

by:byte1
Comment Utility
"and" on line 2 ? I dont think that would work.
0
 

Author Comment

by:byte1
Comment Utility
I want certain rows of data from oc_searchnames and some from SDN, if matching names from SearchNames is found in either of the other two tables, SDN and Aliases. It shouldnt be And or an OR.
0
 

Author Comment

by:byte1
Comment Utility
Sorry my bad :
 "It shouldnt be And but an OR"
0
 
LVL 41

Expert Comment

by:ralmada
Comment Utility
My mistake, there's an extra AND there. Can you give this a try?
select * from OC_SDN a

left join oc_Aliases b on a.Ent_num = b.Ent_num

left join Fiport.dbo.[oc_searchnames] c on a.SDN_Name like c.Names + '%'

where b.Alt_Name like c.Names + '%'

Open in new window

0
 

Author Comment

by:byte1
Comment Utility
No sorry, that didnt help either
0
 
LVL 41

Accepted Solution

by:
ralmada earned 500 total points
Comment Utility
So basically you just need to pull more columns from OC_SearchNames, am I right? So I would still use your old query but modify it like this:

SELECT t1.*, t2.* FROM oc_SDN t1

left join oc_SearchNames t2 on a.SDN_Name like b.Names + '%'

WHERE Ent_Num IN 

                   (

            SELECT Ent_Num FROM oc_SDN A INNER JOIN FiPort.dbo.[oc_SearchNames] B 

            ON A.SDN_Name LIKE B.Names + '%'

                    )

OR Ent_Num IN ( 

            SELECT Ent_Num FROM oc_Aliases A INNER JOIN FiPort.dbo.[oc_SearchNames] B 

            ON A.Alt_Name LIKE B.Names + '%'

                    )

Open in new window

0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

by Mark Wills Attending one of Rob Farley's seminars the other day, I heard the phrase "The Accidental DBA" and fell in love with it. It got me thinking about the plight of the newcomer to SQL Server...  So if you are the accidental DBA, or, simp…
INTRODUCTION: While tying your database objects into builds and your enterprise source control system takes a third-party product (like Visual Studio Database Edition or Red-Gate's SQL Source Control), you can achieve some protection using a sing…
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now