2014-12-04 2 views
1

У меня есть 2 таблицы IlRoutes и PlRoutes, и оба они имеют общий идентификатор RouteID.sql запрос для получения записей на основе 2 ID

IlRoute:       PlRoute: 
RouteID CID    RouteID PlID Division 
    1  3     1  2  71 
    2  3     1  7  29 
    3  3     2  1  78 
    4  37     2  7  21 
    5  37     3  5  50 
    6  37     3  6  50 

Я хочу, чтобы записи, где plID = 7 и CID = 3, а также записи, основанные на RouteID-х

Вот пример вывода:

RouteID CID RouteID PlID Division 
    1  3  1  2  71 
    1  3  1  7  29 
    2  3  2  1  78 
    2  3  2  7  21 

любая помощь очень ценится.

ответ

1

Предполагая, что я понять ваш вопрос правильно, вы хотите вернуть любую запись, которая соответствует с cid = 3 в IlRoute таблице, и по меньшей мере одну запись в таблице PlRoute plId = 7.

Первые join таблицы вместе, а затем использовать exists, чтобы увидеть, если есть хотя бы одна запись с plid = 7:

select i.routeid, i.cid, p.plid, p.division 
from ilroute i 
    join plroute p on i.routeid = p.routeid 
where i.cid = 3 and 
    exists (select 1 
       from PlRoute p2 
       where p.routeid = p2.routeid 
        and p2.plid = 7) 
+0

Спасибо! отлично работал – rkeerthi

0
select 
    IlRoute.*, PlRoute.* 
from 
    IlRoute 
join 
    PlRoute 
where 
    IlRoute.RouteID = PlRoute.RouteID 
+0

Это будет возвращать все записи, которые соответствуют на 'routeid', независимо от' cid' и 'plid' ... – sgeddes

0
select IlRoute.RouteID, IlRoute.CID, PlRoute.RouteID, PlRoute.PlID, PlRoute.Division 
from IlRoute,PlRoute 
where IlRoute.RouteID=PlRoute.RouteID 
and IlRoute.CID=3  
0

Следующая отвечает вашим критериям и должны быть наиболее эффективными:

SELECT i.RouteID, i.CID, p.RouteID, p.PlID, pl.Division 
FROM IlRoute i 
INNER JOIN PlRoute p ON i.RouteID=p.RouteID 
CROSS APPLY (SELECT TOP 1 1 FROM PlRoute WHERE RouteID=i.RouteID AND PlID=7) pCriteria 
WHERE CID=3 
Смежные вопросы