2014-02-01 3 views
3

Например:SQL - выбор строки, столбца своих дочерних строк содержит определенную строку

 
RouteID StopName 
1   stop_1 
1   stop_2 
1   stop_3 
2   stop_1 
2   stop_2 
3   stop_4 
4   stop_5 

Я хочу, чтобы выбрать маршрут, который он имеет остановку под названием «stop_1», я ожидаю результатов следующим образом:

 
RouteID StopName 
1   stop_1 
1   stop_2 
1   stop_3 
2   stop_1 
2   stop_2 

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

EDIT

Как насчет RouteID со стола Route и StopName со стола Stop? Фактически, приведенная выше таблица - их таблица отношений.

Спасибо, продвинутый!

ответ

0

Вы можете использовать внутренний запрос, который выбирает маршруты для этого:

select r.RouteID, s.StopName from route r 
inner join stop s on r.StopID = s.StopID 
where RouteID in 
    (select t1.RouteID from route t1 
    where exists (select * from stop s2 where t1.StopID = s2.StopID and s2.StopName = 'stop_1')) 
order by r.RouteID, s.StopName 

SQL Fiddle demo

+0

как о RouteID от таблицы маршрутов, и StopName от стола Стоп? – user3143433

+0

Затем вы можете создать соединение в таблице StopName. – Szymon

+0

можете привести пример? – user3143433

0

Новый Ответ:

Предположив, что из ожидаемых результатов вы имеете в виду, что вы хотите получите строки, которые имеют одинаковые RouteID с stop_1, я буду делать следующее:

SELECT * FROM YOUR_TABLE_NAME 
WHERE RouteID IN 
(
SELECT 

RouteID 

FROM YOUR_TABLE_NAME 

WHERE StopName = 'stop_1' 
) 

Старый ответ: ИГНОРИРУЙТЕ, НАХОДИТЬСЯ ТОЛЬКО БЛАГОДАРЯ КОММЕНТАРИИ

В синтаксисе оракула, вы можете использовать функцию Sub String. он берет первый ввод строки, с которой вы хотите работать, вторая начальная позиция, последняя - длина, поэтому 1 ----------- составляет 12 символов, инструкция будет следующей:

substr(your_column, 12, LENGTH(your_column) - 12) 

теперь эта логика может быть использована следующим образом:

SELECT 
Your desired values to get 

FROM 
(
SELECT 

substr(your_column, 1, 1) AS ID, substr(your_column, 12, LENGTH(your_column) - 12) AS VALUE 

FROM YOUR TABLE 
) 
+0

Я уверен, что все эти '-' - всего лишь способ представить таблицу с двумя столбцами. – Szymon

+0

@ Шимон, это будет плохо для меня! : D, впустую была хорошая логика для непонятного вопроса, тогда – simsim

1

Новый ответ для редактирования

Опять же, при условии, таблица маршрутов называется Routes и ваша таблица отношение называется RouteStops.

SELECT * FROM Routes r 
JOIN RouteStops rs ON rs.RouteID = r.RouteID 
WHERE rs.StopName = 'stop_1' 

Старый Ответ:

Ради примера, я буду считать, что ваше имя таблицы Маршруты

SELECT * FROM Routes r 
JOIN Routes r2 ON r.RouteID = r2.RouteID 
WHERE r2.StopName = 'stop_1' 

Я в основном вступление в таблицу с собой когда это маршрут содержит stop_1 и затем перечисляет все записи маршрутов.

0

Try This

SELECT ROUTID 
FROM Routes R 
JOIN Stop S ON R.RouteID = S.RouteID 
WHERE S.StopName IN ('stop_1 ','stop_2','stop_3') 
Смежные вопросы