Solved

3 table INNER JOIN

Posted on 2009-07-06
14
427 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 6
14 Comments
 
LVL 41

Expert Comment

by:ralmada
ID: 24786387
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
ID: 24786404
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
ID: 24786457
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
Major Incident Management Communications

Major incidents and IT service outages cost companies millions. Often the solution to minimizing damage is automated communication. Find out more in our Major Incident Management Communications infographic.

 
LVL 41

Expert Comment

by:ralmada
ID: 24786462
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
ID: 24786510
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
ID: 24786541
No that didnt help either, its same as my new query.
0
 
LVL 41

Expert Comment

by:ralmada
ID: 24786545
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
 
LVL 41

Expert Comment

by:ralmada
ID: 24786560
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
ID: 24786590
"and" on line 2 ? I dont think that would work.
0
 

Author Comment

by:byte1
ID: 24786604
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
ID: 24786608
Sorry my bad :
 "It shouldnt be And but an OR"
0
 
LVL 41

Expert Comment

by:ralmada
ID: 24787241
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
ID: 24787737
No sorry, that didnt help either
0
 
LVL 41

Accepted Solution

by:
ralmada earned 500 total points
ID: 24787889
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

Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction: When running hybrid database environments, you often need to query some data from a remote db of any type, while being connected to your MS SQL Server database. Problems start when you try to combine that with some "user input" pass…
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

732 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