Reputation: 123
I have this structure DB
create table server(name varchar, dev varchar, qa varchar, prod varchar);
create table app(id varchar, teamname varchar);
insert into server values('trans', 't1','t2','t3');
insert into app values('t1', 'appdev');
insert into app values('t2', 'appqa');
insert into app values('t3', 'appprod');
What i need is to get the values of t1, t2 and t3 and the only variable i have with me is server.name. How do i get it. My initial query looks like this
select(select app.teamname from app join server on app.id=server.dev)as devteam,
(select app.teamname from app join server on app.id=server.qa)as qateam,
(select app.teamname from app join server on app.id=server.prod)as prodteam from server where server.name='trans'
but it looks really long and childish. Is there a better way to get this?
Upvotes: 0
Views: 825
Reputation: 1959
The varchar needs (9) or some length, else it defaults to 1. Temp table used for this example... comment out -- the drop the first time.
drop table #server;
drop table #app;
create table #server(name varchar(9), dev varchar(9), qa varchar(9), prod varchar(9));
create table #app(id varchar(9), teamname varchar(9));
insert into #server values('trans', 't1','t2','t3');
insert into #app values('t1', 'appdev');
insert into #app values('t2', 'appqa');
insert into #app values('t3', 'appprod');
select
ts.name
,tdev.teamname
,tqa.teamname
,tprod.teamname
from #server as ts
left join #app as tdev
on ts.dev = tdev.id
left join #app as tqa
on ts.qa = tqa.id
left join #app as tprod
on ts.prod = tprod.id
where ts.name = 'trans'
result:
name teamname teamname teamname
trans appdev appqa appprod
Upvotes: 1
Reputation: 2459
Another way--not necessarily better, but perhaps simpler, is:
select
app1.teamname as devteam,
app2.teamname as qateam,
app3.teamname as prodteam
from
server
inner join app as app1 on app1.id = server.dev
inner join app as app2 on app2.id = server.qa
inner join app as app3 on app3.id = server.prod
where
server_name = 'trans';
Upvotes: 1